如何在git中取消我的最后一次提交?

它是

git reset --hard HEAD

or

git reset --hard HEAD^

?


当前回答

小心!重置-硬将删除您的本地(未提交)修改,太。

git reset --hard HEAD^

注意:如果你是在窗口,你需要引用HEAD^ so

git reset --hard "HEAD^"

如果您想在不丢弃工作的情况下恢复提交,请使用——soft标志而不是——hard标志

git reset --soft HEAD^

其他回答

如果您提交了错误的分支

在错误的树枝上:

Git log -2给出了2次最后提交的哈希值,比如$prev和$last Git checkout $prev checkout正确提交 Git checkout -b new-feature-branch为该特性创建一个新分支 Git选择$last补丁与您的更改分支

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

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

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"

如果你不完全确定你所说的“uncommit”是什么意思,也不知道你是否想要使用git重置,请参阅“还原到以前的git提交”。

如果你想更好地理解git重置,请参阅“你能用简单的英语解释什么是“git重置”吗?”


如果你知道你想使用git重置,这仍然取决于你对“uncommit”的定义。如果你想要做的只是撤销提交行为,保持其他所有内容完整,请使用:

git reset --soft HEAD^

如果你想撤销提交行为和你所上演的一切,但保持工作树(你的文件)完好无损:

git reset HEAD^

如果你真的想完全撤销它,扔掉所有未提交的更改,将所有内容重置为上一次提交(如最初的问题所问):

git reset --hard HEAD^

原来的问题也问它是正面^不是正面。HEAD指的是当前提交——通常是当前签出分支的顶端。^是一个可以附加到任何提交说明符的符号,表示“之前的提交”。HEAD^是当前分支之前的提交,就像master^是主分支尖端之前的提交一样。

下面是git-rev-parse文档中描述指定提交的所有方法的部分(^只是众多方法中的一种基本方法)。

如果您正在使用ZSH并看到错误,请注意

zsh: no matches found: HEAD^

您需要转义^

git reset --soft HEAD\^

^将在你的工作树中保留修改后的更改。

git重置-硬头^将扔掉你所做的改变!!