回滚到最后的git commit


120

我刚刚做了一个

git commit -m "blah"

然后添加了一些文件,如何回滚并删除当前文件中尚未添加/提交的内容?


15
不,这不是OP的要求-很明显,他想回滚到上一次提交,而不是撤消上一次提交。他没有说他添加了一些文件然后提交了。很明显他想要最后一次提交。
保罗

1
很难找到这个超级常见问题的答案
山姆

Answers:


211

买者自负 - 破坏性的命令。

缓解 -git reflog 如果需要,可以节省您的时间。


1)撤消本地文件更改并保持您的最后一次提交

git reset --hard

2)撤消本地文件更改并删除上一次提交

git reset --hard HEAD^

3)保留本地文件更改并删除上一次提交

git reset --soft HEAD^

20
该命令将删除您以前的提交,因此请谨慎使用!git reset --hard更安全
rudivonstaden

9
WTF以此作为正确的答案,得到36票赞成。我为此花了几天的时间...因为我读的是答案而不是评论。这不是问题的正确答案!
克里斯·内维尔

1
好的,一切都不会丢失!您可以执行git reflog这将允许您查看重置之前所做的提交。然后,您可以检出这些提交
Chris Nevill,

3
对于它的价值,我已经将OP的问题解释为“我如何回滚提交并删除当前文件”,但这一直并且仍然是模棱两可的。如果OP仅说“我如何删除尚未添加或提交的当前文件”,我会以不同的方式理解
Joe Hanink

2
Git是Alan Kays陈述的对立物简单的事情应该简单,复杂的事情应该可能。...尤其是第一部分。不过,谢谢您的回答。它有所帮助。
0xC0000022L

46

如果要删除已经暂存的新添加的内容和文件(已添加到索引中),则可以使用:

git reset --hard

如果您还想删除最新的提交(带有消息“ blah”的提交),则最好使用:

git reset --hard HEAD^

要删除未跟踪的文件(因此新文件尚未添加到索引)和文件夹,请使用:

git clean --force -d

git reset --hard HEAD ^会永久删除我的最新提交吗?像我不能回到它吗?
user137717

看来“ git clean --force -d”也删除了.gitignored文件夹
Alexey Timokhin

15

git reset --hard 将强制工作目录回到上一次提交并删除新的/更改的文件。


2
做到了,但是文件仍然在那里。(未跟踪的文件仍然存在)
Blankman

在这种情况下,您可以做一个“ git stash”
jacktrade

3
赞成,因为这是对OP的明确而明确的问题的唯一清晰明确的答案。
保罗



3

自上次提交以来,一种简单的万无一失的方式来撤消UNDO本地文件更改是将其放置在新分支中:

git branch changes
git checkout changes
git add .
git commit

这会将更改保留在新分支中。返回原始分支以将其找回上一次提交:

git checkout master

新分支是练习以不同方式还原更改的好地方,而不会弄乱原始分支。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.