如何取消我最后一次提交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^不是HEADHEAD是指当前提交 – 通常是当前签出分支的提示。 ^是可以附加到任何提交说明符的符号,意思是“提交之前”。 所以, 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删除正在回滚的更改。

如果你犯了错误的分支

在错误的分支上:

  1. git log -2给你2最后提交的散列,可以说$prev$last
  2. git checkout $prev checkout correct commit
  3. git checkout -b new-feature-branch分支为function创build一个新的分支
  4. git cherry-pick $last为你的修改补丁一个分支

然后,你可以按照上面build议的方法从第一个分支中删除你的提交。

小心一点。

但是你可以使用rebase命令

 git rebase -i HEAD~2 

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