How can I restore only the modified files on a git checkout?
假设我有一个包含数百个文件的目录。我修改了其中的几项,但后来我意识到我的更改很糟糕。如果我这样做:
1 | git checkout whole_folder |
然后所有的东西都被再次签出,我必须重新编译所有的东西。是否有一种方法使签出只影响修改过的文件,或者我需要单独对每个文件运行
试试这个:
1 | $ git checkout `git ls-files -m` |
-M只列出修改过的文件。
但是
1 | git checkout -- $(git ls-files -m) |
同时检查删除的文件。
如果您只想签出修改过的文件,这对我有效:
1 | git checkout -- $(git status -uno | grep --colour=never '#' | awk '{ print $2 $3 }' | grep --colour=never ^modified: | cut -c10-) |
您所做的是正确的,但是您可能希望添加一个消除歧义的
1 | git checkout -- whole_folder |
Git将只更新它实际需要更改的文件上的时间戳,因此,如果基于依赖关系的构建工具正确地使用了mtimes,则应重新构建最小的安全文件数。如果你看到不同的行为,那将是一个错误。