Git:你如何结账所有删除的文件?

时间:2017-01-11 14:26:38

标签: git version-control git-checkout configuration-management

在git中,我熟悉如何使用git checkout -- [<paths>...]语法检查已删除的单个文件(建议git status时使用。

要获取所有文件,您可以创建一个列表并将列表作为上述命令的参数。

但是当你只想要删除所有已删除的文件(即你的cwd中的rm -rf,然后你想要恢复所有文件)时,生成该列表是不够优雅的。

如何查看所有已删除的文件?

6 个答案:

答案 0 :(得分:11)

生成列表不是 hard:

git diff --no-renames --name-only --diff-filter=D

要使其适合git checkout,请使用-zxargs -0

git diff --no-renames --name-only --diff-filter=D -z |
    xargs -0 git checkout --

请注意,使用git checkout -f -- .与上述完全不同,因为git checkout -f -- .将覆盖已修改但尚未添加到索引的文件,而上述内容仅 从索引中提取仍在索引但不再在工作树中的文件。

(如果您没有此类已修改的文件,git checkout -f -- .将有效,但git checkout -- .也会有效。)

答案 1 :(得分:2)

  

当你只想要删除所有文件时(例如你的cwd中的rm -rf,然后你想恢复所有文件)

你想要

git checkout-index -a

答案 2 :(得分:1)

我经常做一个

1. $ git checkout .

结帐更改后跟

2. $ git clean -fd

这将删除未跟踪文件。 f表示文件,d表示目录。

你可以在第二步之前做一个干跑

git clean -fdn

这将列出要删除的文件和目录。

请参阅undoing changes

的更多信息

答案 3 :(得分:0)

命令git checkout --force似乎可以解决问题。 --force选项的手册页说“[--force选项]用于丢弃本地更改”。

来自git-checkout手册页:

   -f, --force
       When switching branches, proceed even if the index or the
       working tree differs from HEAD. This is used to throw away 
       local changes.

       When checking out paths from the index, do not fail upon 
       unmerged entries; instead, unmerged entries are ignored.

答案 4 :(得分:0)

如果删除文件的更改尚未提交,则可以使用git checkout -- .

如果已提交删除文件的更改,则可以使用git reset --hard HEAD~

答案 5 :(得分:0)

我能够做到:

for f in $(git diff --no-renames --name-only --diff-filter=D);do git checkout -- $f ;done