关于撤消:如何在Git中取消提交上一次提交

How to uncommit my last commit in Git

本问题已经有最佳答案,请猛点这里访问。

如何取消在Git中提交最后一个提交?

它是

1
git reset --hard HEAD

1
git reset --hard HEAD^


如果您不完全确定"取消提交"是什么意思,也不知道是否要使用git reset,请参见"恢复到以前的git提交"。

如果你想更好地理解git reset,请看"你能用简单的英语解释一下"git reset"是什么吗?".

如果你知道你想使用git reset,它仍然取决于你所说的"取消提交"是什么意思。如果您只想撤消提交操作,保留所有其他操作,请使用:

1
git reset --soft HEAD^

如果您想撤消提交操作以及您准备的所有操作,但要保留工作树(您的文件是完整的):

1
git reset HEAD^

如果您真的想完全撤消它,放弃所有未提交的更改,将所有内容重置为上一次提交(如原始问题所问的那样):

1
git reset --hard HEAD^

最初的问题也问它是HEAD^而不是HEADHEAD是指当前提交——通常是指当前签出分支的提示。^是一个可以附加到任何commit说明符的符号,意思是"commit before"。所以,HEAD^是在当前提交之前的提交,就像master^是在主分支的尖端之前的提交一样。

这里是Git Rev解析文档的一部分,描述了指定提交的所有方法(^只是许多方法中的一个基本方法)。


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

1
git reset --soft HEAD^

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

1
git reset --hard HEAD^

你也可以说

1
git reset --soft HEAD~2

返回2次提交。

编辑:正如charsi所提到的,如果您在Windows上,您将需要在引号中放入head或commit hash。

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


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

git reset --hard HEAD^将丢弃您所做的更改!!!!


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

1
git reset --hard HEAD^

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

1
git reset --hard"HEAD^"


只是一个提示-如果您使用zsh并看到错误

1
zsh: no matches found: HEAD^

你得逃出江户十一〔九〕号

1
git reset --soft HEAD\^

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


如果你犯了错误

在错误的分支上时:

  • git log -2给出了最后两个承诺的散列,比如$prev$last
  • git checkout $prev签出正确承诺
  • git checkout -b new-feature-branch为功能创建了一个新分支
  • git cherry-pick $last用您的更改修补分支
  • 然后,您可以按照上面建议的方法之一从第一个分支中删除提交。


    小心点。

    但是您可以使用REBASE命令

    1
    git rebase -i HEAD~2

    一个vi将打开,您所要做的就是删除带有commit的行。也可以阅读正确版本@vi中显示的指令,在这种模式下可以执行一些操作。