Tre*_*ith 11 git version-control configuration-management git-checkout
在git中,我熟悉如何使用git checkout -- [<paths>...]语法检查已删除的单个文件(建议您这样做)git status.
要获取所有文件,您可以创建一个列表并将列表作为上述命令的参数.
但是,当你只想要删除所有已删除的文件(即你的cwd中的rm -rf,然后你想恢复所有文件)时,生成该列表是不优雅的.
如何查看所有已删除的文件?
tor*_*rek 12
生成列表不说难:
git diff --no-renames --name-only --diff-filter=D
Run Code Online (Sandbox Code Playgroud)
使其适用于git checkout,使用-z和xargs -0:
git diff --no-renames --name-only --diff-filter=D -z |
xargs -0 git checkout --
Run Code Online (Sandbox Code Playgroud)
请注意,使用git checkout -f -- .与上述完全不同,因为git checkout -f -- .将覆盖已修改但尚未添加到索引的文件,而上述内容仅从索引中提取仍在索引中但不再在工作中的文件-树.
(如果你没有这样的修改过的文件,git checkout -f -- .那就行了,但那样的话git checkout -- ..)
当您只想要所有已删除的文件时(即 cwd 中的 rm -rf 然后您想恢复所有文件)
你要
git checkout-index -a
Run Code Online (Sandbox Code Playgroud)
我通常做一个
git checkout .
Run Code Online (Sandbox Code Playgroud)
签出更改,然后
git clean -fd
Run Code Online (Sandbox Code Playgroud)
这将删除未跟踪的文件。f对于文件和d目录。
您还可以在第二步之前进行空运行
git clean -fdn
Run Code Online (Sandbox Code Playgroud)
这将列出要删除的文件和目录。
请参阅有关撤消更改的更多信息
该命令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.
Run Code Online (Sandbox Code Playgroud)