git checkout所有文件


127

如何摆脱存储库中所有文件中的所有更改?

假设我在分支机构中,并且做了一些更改。git status在“未暂存的更改未提交”中返回一组文件,我注意到我希望摆脱所有文件中的所有这些更改。如何用一个命令执行此操作?

我知道我可以执行以下操作来仅检出一个文件:

git checkout -- <file>

我注意到,git checkout --仅此一项就返回所有未提交文件的列表。但是,我找不到一种方法来检查所有这些对象,例如git checkout --all

我检查了man git checkout,找不到任何东西。我还看到了Git:检出除一个文件外的所有文件,并尝试了git checkout .但也不起作用。

我是否需要通过遍历git checkout --输出来以编程方式进行操作?

Answers:


193

如果您位于工作目录的根目录,则可以 git checkout -- .检出当前HEAD中的所有文件并替换本地文件。

您还git reset --hard可以重置工作目录并替换所有更改(包括索引)。


两个选项是否等效(如果我们重置为HEAD)?
lucidbrot

10
不,有某些差异。例如git checkout -- .只会将更改重置为索引状态。因此,如果您已经将文件添加到索引中,那么它将被重置为该索引。另一方面,它git reset --hard也会丢弃索引,因此,例如,如果您已将未跟踪的文件添加到索引中(开始跟踪它们),它们也将被删除。git checkout还允许您通过传递更特定的路径来部分还原工作目录,这可能非常有用。

1

4
@poke嗨,Poke,我确定是git checkout-。不起作用。我尝试了多次未分级的更改。
阿曼

2
其他获得相同结果的命令:git checkout --forcegit reset --hard
tjalling

3

我发现有用的其他方式是:

git checkout <wildcard> 

例:

git checkout *.html

更普遍:

git checkout <branch> <filename/wildcard>

1
如果在外壳程序上启用了globbing,并且工作目录中有未跟踪的文件,那么除非您将星号(例如git checkout \*或)转义,否则这将失败git checkout '*'
Josh Cooley
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.