如何在git中取消提交我的最后一次提交?
是不是
git reset --hard HEAD
或
git reset --hard HEAD^
?
小心!reset --hard也将删除您的本地(未提交)修改。
reset --hard
注意:如果你在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 reset,请参阅“你能用简单的英语解释一下“git重置”的作用吗?”。
如果你知道你想使用git reset,这仍然取决于你所说的“取消提交”是什么意思。如果你想做的只是撤消提交的行为,保持其他一切不变,请使用:
如果您想撤消提交行为和您暂存的所有内容,但保留工作树(您的文件)不变:
git reset HEAD^
如果你真的想完全撤消它,丢弃所有未提交的更改,将所有内容重置为上一次提交(如最初的问题所问):
最初的问题还问它是HEAD^而不是HEAD。HEAD指的是当前提交-通常是当前签出分支的尖端。^是一种符号,可以附加到任何提交说明符,意思是“之前的提交”。所以,HEAD^是当前提交之前的提交,就像master^是主分支尖端之前的提交一样。
HEAD^
HEAD
^
master^
下面是git-rec-parse留档的一部分,描述了指定提交的所有方法(^只是许多方法中的一个基本方法)。
保留要撤消的提交中的更改
要从要撤消的提交中销毁更改
你也可以说
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中显示的指令。在此模式下可以执行几件事。
vi
如果您还没有推送更改,请使用git reset --soft [Hash for one commit]回滚到特定的提交。--soft告诉git保持回滚更改(即,将文件标记为已修改)。--hard告诉git删除正在回滚的更改。
git reset --soft [Hash for one commit]
--soft
--hard
如果你选择了错误的分支
在错误的分支上:
git log -2
$prev
$last
git checkout $prev
git checkout -b new-feature-branch
git cherry-pick $last
然后,您可以按照上面建议的方法之一从第一个分支中删除您的提交。