Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将未提交的更改还原到git中特定类型的文件_Git_Git Revert - Fatal编程技术网

如何将未提交的更改还原到git中特定类型的文件

如何将未提交的更改还原到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,则可以使用

我的git存储库中有一堆修改过的文件,其中很多是xml文件。如何仅恢复xml文件的更改(重置修改)?

您不需要
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 --