如何将未提交的更改还原到git中特定类型的文件
我的git存储库中有一堆修改过的文件,其中很多是xml文件。如何仅恢复xml文件的更改(重置修改)?您不需要如何将未提交的更改还原到git中特定类型的文件,git,git-revert,Git,Git Revert,我的git存储库中有一堆修改过的文件,其中很多是xml文件。如何仅恢复xml文件的更改(重置修改)?您不需要find或sed,可以使用git理解的通配符(不依赖于shell): 引号将阻止shell在执行命令之前仅将命令扩展到当前目录中的文件 您还可以禁用shell glob扩展(使用bash): 当然,这将不可避免地抹去您的更改 find . -name '*.xml' -print0 | xargs -0 git checkout HEAD 如果您的系统没有find和xargs,则可以使用
find
或sed
,可以使用git理解的通配符(不依赖于shell):
引号将阻止shell在执行命令之前仅将命令扩展到当前目录中的文件
您还可以禁用shell glob扩展(使用bash):
当然,这将不可避免地抹去您的更改
find . -name '*.xml' -print0 | xargs -0 git checkout HEAD
如果您的系统没有
find
和xargs
,则可以使用类似的工具。或者只需在zsh
中的git checkout HEAD**/*.xml
或任何其他shell中使用这种形式的请求全局绑定即可。谢谢大家的回复,但我找到了最准确的解决方案:
git diff --name-only -- '*.xml' | sed 's, ,\\&,g' | xargs git checkout --
sed是一个用户,用于转义困扰xargs的空格,所有内容都工作得非常快速和准确。
*/*。xml
也不是“所有目录中的xml文件”。@wRAR找到了它。。。git中的globbing没有很好的文档记录。***.xml
将使用您的shell globs,因此删除的文件不会被签出,但是如果只是更改,应该可以工作。出于某种原因,当我指定一个分支时,这不起作用:-(git签出主控--“*.xml”
例如,在git签出--“*.xml”的地方不起作用
does:-(是否有办法签出非特定类型的文件?如git签出--“!*.xml”请参见我的答案,您不需要所有这些:)
find . -name '*.xml' -print0 | xargs -0 git checkout HEAD
git diff --name-only -- '*.xml' | sed 's, ,\\&,g' | xargs git checkout --