如何在git checkout上仅恢复修改后的文件?

时间:2011-09-14 10:49:03

标签: git

假设我有一个包含数百个文件的目录。我修改了其中几个,但之后我意识到我的改变很糟糕。如果我这样做:

git checkout whole_folder

然后一切都被检出,我必须重新编译一切。有没有办法让checkout只影响修改过的文件,还是我需要分别对每个文件运行checkout

3 个答案:

答案 0 :(得分:16)

试试这个:

$ git checkout `git ls-files -m`

-m仅列出修改后的文件。

答案 1 :(得分:3)

但是

git checkout -- $(git ls-files -m)

还会检出已删除的文件。

如果您只想检查修改过的文件,那么我可以使用

git checkout -- $(git status -uno | grep --colour=never '#' | awk '{ print $2 $3 }' | grep --colour=never ^modified: | cut -c10-)

答案 2 :(得分:2)

你正在做的是正确的,但你可能想要添加一个明确的--,以防你的目录名与分支名相同,即:

git checkout -- whole_folder

git只会更新它实际需要更改的文件的时间戳,因此如果基于依赖项的构建工具正确使用mtimes,则应重建最小安全文件数。如果您看到不同的行为,那将是一个错误。