如何取消我最后一次提交git
我怎么能取消我最后一次提交git?
是吗
git reset --hard HEAD
要么
git reset --hard HEAD^
如果您不完全确定“uncommit”的含义,不知道是否要使用git reset
,请参阅“ 恢复到之前的git commit ”。
如果你想更好地理解git reset
,请参阅“ 你能解释一下”git reset“用简单的英语吗? ”。
如果你知道你想要使用git reset
,它仍然取决于你的意思是“uncommit”。 如果你想要做的只是撤消提交的行为,而保留其他所有的东西,请使用:
git reset --soft HEAD^
如果你想撤销提交的行为和你所做的一切,但是离开工作树(你的文件完好无损):
git reset HEAD^
如果你真的想完全撤销它, 扔掉所有未提交的更改,将所有内容重置为以前的提交 (如原始问题所述):
git reset --hard HEAD^
原来的问题也是问HEAD^
不是HEAD
。 HEAD
是指当前提交 – 通常是当前签出分支的提示。 ^
是可以附加到任何提交说明符的符号,意思是“提交之前”。 所以, HEAD^
是在当前的提交之前的提交,就像master^
是在主分支的提示之前的提交一样。
下面是git-rev-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"
这是后者。
git reset --hard HEAD^
,如果你想也扔掉你所做的改变。 git reset --soft HEAD^
会保留修改后的工作树。
小心, reset --hard
将删除您的本地(未提交)的修改。
git reset --hard HEAD^
注意:如果你在windows上,你需要引用HEAD ^所以
git reset --hard "HEAD^"
只是一个注释 – 如果你使用ZSH并看到错误
zsh: no matches found: HEAD^
你需要逃避^
git reset --soft HEAD\^
如果你还没有推送你的修改,请使用git reset --soft [Hash for one commit]
回滚到特定的提交。 --soft
告诉git保持更改被回滚( --soft
文件标记为已修改)。 --hard
告诉git删除正在回滚的更改。
如果你犯了错误的分支
在错误的分支上:
-
git log -2
给你2最后提交的散列,可以说$prev
和$last
-
git checkout $prev
checkout correct commit -
git checkout -b new-feature-branch
分支为function创build一个新的分支 -
git cherry-pick $last
为你的修改补丁一个分支
然后,你可以按照上面build议的方法从第一个分支中删除你的提交。
小心一点。
但是你可以使用rebase命令
git rebase -i HEAD~2
一个vi
将打开,你所要做的就是删除提交的行。 也可以阅读正确版本@ vi
显示的指令,可以在这个模式下执行一些操作