git checkout所有文件

fed*_*qui 103 git git-checkout

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

说我在一个分支机构,我做了一些改变.git status返回"未提交更改的更改"中的一组文件,我注意到我想要删除所有文件中的所有这些更改.如何使用单个命令执行此操作?

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

git checkout -- <file>
Run Code Online (Sandbox Code Playgroud)

我注意到git checkout --单独返回所有未提交文件的列表.但是,我无法找到一种方法来检查所有这些,例如git checkout --all.

我检查过man git checkout,找不到任何东西.我也看到了Git:Checkout除了一个以外的所有文件并且尝试过git checkout .也没有用.

我是否必须通过循环git checkout --输出以编程方式执行此操作?

pok*_*oke 159

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

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

  • 不,有一些差异.例如`git checkout - .`只会重置对索引状态的更改.因此,如果您已经将文件添加到索引中,那么它将重置为.另一方面,`git reset --hard`也会抛弃索引,例如,如果你有未跟踪的文件添加到索引(开始跟踪它们),它们也将被删除.`git checkout`还允许你只通过传递一个非常有用的更具体的路径来部分恢复工作目录. (7认同)
  • @poke嗨Poke,我肯定git checkout - .不起作用.我尝试了多次非分阶段更改. (3认同)
  • 其他获得相同结果的命令:git checkout --force,git reset --hard。 (2认同)

Sin*_*hak 11

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

git checkout <wildcard> 
Run Code Online (Sandbox Code Playgroud)

例子:

git checkout *.html
Run Code Online (Sandbox Code Playgroud)

更普遍:

git checkout <branch> <filename/wildcard>
Run Code Online (Sandbox Code Playgroud)

  • 如果您的 shell 上启用了通配符,并且工作目录中有未跟踪的文件,那么除非您转义星号,否则这将失败,例如 `git checkout \*` 或 `git checkout '*'`。 (4认同)