如何在git中取消提交我的最后一次提交?
是吗
git reset --hard HEAD
或
git reset --hard HEAD^
答案 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^
而不是HEAD
。 HEAD
指的是当前提交 - 通常是当前签出分支的提示。 ^
是一个可以附加到任何提交说明符的表示法,意思是“之前的提交”。因此,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)
如果您提交了错误的分支
在错误的分支上:
git log -2
为您提供最后两次提交的哈希值,让我们说$prev
和$last
git checkout $prev
结帐正确提交git checkout -b new-feature-branch
为功能git cherry-pick $last
根据您的更改修补分支然后,您可以按照上面建议的方法从第一个分支中删除您的提交。
答案 7 :(得分:1)
小心。
但您可以使用rebase命令
git rebase -i HEAD~2
将打开vi
,您所要做的就是删除提交行。也可以阅读适当版本@ vi
中显示的说明,可以在此模式下执行一些操作