在上次提交之后,如何撤消对目录的所有更改,包括删除添加的文件,重置已修改的文件以及重新添加删除的文件?

评论

还原到先前的Git提交的可能副本

@nawfal可能是重复的,但与相应的“如何还原git存储库”相比,“在最后一次提交后重置所有更改”匹配的搜索条件(在Google中搜索的单词)更多。至少对于像我这样不以英语为母语的人而言:d

#1 楼

首先,重置所有更改
,这将撤消对跟踪文件所做的任何更改并恢复已删除的文件:
git reset HEAD --hard

其次,删除新文件
这将删除所有新文件自上次提交以来添加的内容:
git clean -fd

保留由于.gitignore而未跟踪的文件;它们不会被删除
警告:使用-x而不是-fd会删除忽略的文件。您可能不想这样做。

评论


@Adam:有时您可能还希望-x选项也进行git clean,这也指示它也删除被忽略的文件。

–卡斯卡贝尔
2011年1月8日,0:35



如果要保留由于.gitignore而无法跟踪的文件,请小心使用git clean -fd命令。

–bitsoflogic
2014年9月23日下午13:12

@Levinaris:git clean -fd的另一种方法是不会删除被忽略的文件。 -x将。

– Robert Siemer
15年1月13日在16:14

@RobertSiemer实际上,可以!如果您有完全由忽略文件组成的任何文件夹,它将删除那些文件夹,从而删除忽略的文件。考虑一个.gitignore文件,就像这里的文件:stackoverflow.com/q/25554504/456645。在此示例中,假定某些文件夹没有PHP文件。 git clean -fd将删除那些文件夹和未跟踪的文件。使用git版本1.9.1测试

–bitsoflogic
15年1月20日在17:24

但是为什么根本需要第二次“清理”呢?

–希里(Shirish Herwade)
17年8月4日在9:44

#2 楼


在上一次提交之后,如何撤消对目录的所有更改,包括删除添加的文件,重置已修改的文件以及重新添加删除的文件?




您可以使用以下方法撤消对跟踪文件的更改:

git reset HEAD --hard



您可以使用以下方法删除未跟踪的文件:

git clean -f



您可以使用以下方法删除未跟踪的文件和目录:

git clean -fd


,但是您不能撤消对未跟踪文件的更改。


您可以删除忽略和未跟踪的文件和目录

git clean -fdx


,但是您不能撤消对忽略文件的更改。


还可以将clean.requireForce设置为false

git config --global --add clean.requireForce false


以避免在使用-f时使用--forcegit clean)。 br />

评论


太棒了,正是我所需要的。感谢您对所有相关命令的比较!

–字幕
17年1月25日在16:56

#3 楼

在这种情况下有两个命令可以使用,

root> git reset --hard HEAD〜1

root> git push -f

有关更多git命令的信息,请参见此页面

评论


git push -f与问题无关,在这种情况下,很危险

– mustache1up
20-2-11在22:19