如何取消我在Git中的最后一次提交

如何在git中取消提交我的最后一次提交?

是不是

git reset --hard HEAD

git reset --hard HEAD^

?

1535330 次浏览

小心!reset --hard也将删除您的本地(未提交)修改。

git reset --hard HEAD^

注意:如果你在Windows上,你需要引用HEAD^所以

git reset --hard "HEAD^"

如果您想恢复提交没有丢弃工作,请使用--soft标志而不是--hard

git reset --soft HEAD^

git reset --soft HEAD^将在您的工作树中保留修改后的更改。

git reset --hard HEAD^会扔掉你所做的改变!!!

如果您不完全确定“取消提交”的含义,并且不知道是否要使用git reset,请参阅“恢复到以前的Git提交”。

如果您想更好地理解git reset,请参阅“你能用简单的英语解释一下“git重置”的作用吗?”。


如果你知道你想使用git reset,这仍然取决于你所说的“取消提交”是什么意思。如果你想做的只是撤消提交的行为,保持其他一切不变,请使用:

git reset --soft HEAD^

如果您想撤消提交行为和您暂存的所有内容,但保留工作树(您的文件)不变:

git reset HEAD^

如果你真的想完全撤消它,丢弃所有未提交的更改,将所有内容重置为上一次提交(如最初的问题所问):

git reset --hard HEAD^

最初的问题还问它是HEAD^而不是HEADHEAD指的是当前提交-通常是当前签出分支的尖端。^是一种符号,可以附加到任何提交说明符,意思是“之前的提交”。所以,HEAD^是当前提交之前的提交,就像master^是主分支尖端之前的提交一样。

下面是git-rec-parse留档的一部分,描述了指定提交的所有方法(^只是许多方法中的一个基本方法)。

保留要撤消的提交中的更改

git reset --soft HEAD^

要从要撤消的提交中销毁更改

git reset --hard HEAD^

你也可以说

git reset --soft HEAD~2

返回2个提交。

编辑:正如charsi提到的,如果您在Windows上,您需要将HEAD或提交哈希放在引号中。

git reset --soft "HEAD^"git reset --soft "asdf"

只是一个注意事项-如果您使用ZSH并看到错误

zsh: no matches found: HEAD^

你需要逃离^

git reset --soft HEAD\^

小心那个。

但是你可以使用rebase命令

git rebase -i HEAD~2

将打开vi,您所要做的就是删除带有提交的行。还可以读取正确版本@vi中显示的指令。在此模式下可以执行几件事。

如果您还没有推送更改,请使用git reset --soft [Hash for one commit]回滚到特定的提交。--soft告诉git保持回滚更改(即,将文件标记为已修改)。--hard告诉git删除正在回滚的更改。

如果你选择了错误的分支

在错误的分支上:

  1. git log -2为您提供2次最后提交的哈希值,假设$prev$last
  2. git checkout $prev校验正确
  3. git checkout -b new-feature-branch为该功能创建一个新分支
  4. git cherry-pick $last用您的更改修补分支

然后,您可以按照上面建议的方法之一从第一个分支中删除您的提交。