【发布时间】:2013-01-29 15:42:28
【问题描述】:
我的 git 存储库中有一堆修改过的文件,其中很多是 xml 文件。如何仅还原 xml 文件的更改(重置修改)?
【问题讨论】:
标签: git git-revert
我的 git 存储库中有一堆修改过的文件,其中很多是 xml 文件。如何仅还原 xml 文件的更改(重置修改)?
【问题讨论】:
标签: git git-revert
你不需要find或sed,你可以使用git理解的通配符(不依赖于你的shell):
git checkout -- "*.xml"
引号会阻止你的shell在执行之前将命令扩展到当前目录中的文件。
您还可以禁用 shell glob 扩展(使用 bash):
set -f
git checkout -- *.xml
当然,这将无法挽回地抹去您的更改!
【讨论】:
*/*.xml 也不是“所有目录中的 xml 文件”。
**/*.xml 将使用您的 shell glob,因此不会检出已删除的文件,但如果只是更改,那应该可以。
git checkout master -- "*.xml" 例如在git checkout -- "*.xml" 的情况下不起作用:-(
find . -name '*.xml' -print0 | xargs -0 git checkout HEAD
如果您的系统没有find 和xargs,则或类似的东西。或者只是zsh 中的git checkout HEAD **/*.xml 或任何其他具有这种形式的reqursive globbing 的shell。
【讨论】:
感谢大家的回复,但我找到了对我来说最准确的解决方案:
git diff --name-only -- '*.xml' | sed 's, ,\\&,g' | xargs git checkout --
sed 是用户逃避困扰 xargs 的空间,并且一切工作都非常快速和准确。
【讨论】: