如何解除我在Git中的最后一次提交

时间:2010-05-16 22:26:32

标签: git undo git-reset git-index

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

是吗

git reset --hard HEAD

git reset --hard HEAD^

8 个答案:

答案 0 :(得分:1170)

如果您不完全确定“uncommit”的含义并且不知道是否要使用git reset,请参阅“Revert to a previous Git commit”。

如果您想更好地理解git reset,请参阅“Can you explain what "git reset" does in plain English?”。


如果您知道要使用git reset,那么仍然取决于您所说的“不承认”。如果您要做的就是撤消提交行为,保留其他所有内容,请使用:

git reset --soft HEAD^

如果您要撤消提交行为和您上演的所有内容,但保留工作树(您的文件完好无损):

git reset HEAD^

如果您确实希望完全撤消它, 丢弃所有未提交的更改,将所有内容重置为之前的提交 (作为原始问题):

git reset --hard HEAD^

原始问题也是HEAD^而不是HEADHEAD指的是当前提交 - 通常是当前签出分支的提示。 ^是一个可以附加到任何提交说明符的表示法,意思是“之前的提交”。因此,HEAD^是当前提交之前的提交,就像master^是主分支提示之前的提交一样。

以下是git-rev-parse documentation中描述所有指定提交方式的部分(^只是许多方法中的基本方法)。

答案 1 :(得分:261)

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

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"

答案 2 :(得分:224)

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

git reset --hard HEAD^ 会让你做出改变!!!

答案 3 :(得分:56)

请注意,reset --hard也会删除您的本地(未提交)修改。

git reset --hard HEAD^

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

git reset --hard "HEAD^"

答案 4 :(得分:22)

只需注意 - 如果您正在使用ZSH并查看错误

zsh: no matches found: HEAD^

您需要转义^

git reset --soft HEAD\^

答案 5 :(得分:19)

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

答案 6 :(得分:14)

如果您提交了错误的分支

在错误的分支上:

  1. git log -2为您提供最后两次提交的哈希值,让我们说$prev$last
  2. git checkout $prev结帐正确提交
  3. git checkout -b new-feature-branch为功能
  4. 创建新分支
  5. git cherry-pick $last根据您的更改修补分支
  6. 然后,您可以按照上面建议的方法从第一个分支中删除您的提交。

答案 7 :(得分:1)

小心。

但您可以使用rebase命令

git rebase -i HEAD~2

将打开vi,您所要做的就是删除提交行。也可以阅读适当版本@ vi中显示的说明,可以在此模式下执行一些操作