【问题标题】:How to revert uncommitted changes to files of a certain type in git如何在git中恢复对特定类型文件的未提交更改
【发布时间】:2013-01-29 15:42:28
【问题描述】:

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

【问题讨论】:

    标签: git git-revert


    【解决方案1】:

    你不需要findsed,你可以使用git理解的通配符(不依赖于你的shell):

    git checkout -- "*.xml"
    

    引号会阻止你的shell在执行之前将命令扩展到当前目录中的文件。

    您还可以禁用 shell glob 扩展(使用 bash):

    set -f
    git checkout -- *.xml
    

    当然,这将无法挽回地抹去您的更改!

    【讨论】:

    • */*.xml 也不是“所有目录中的 xml 文件”。
    • @wRAR 找到它... git 中的 globbing 没有很好的文档记录
    • **/*.xml 将使用您的 shell glob,因此不会检出已删除的文件,但如果只是更改,那应该可以。
    • 由于某种原因,当我指定一个分支时这不起作用:-( git checkout master -- "*.xml" 例如在git checkout -- "*.xml" 的情况下不起作用:-(
    • 有没有办法签出——不是特定类型的文件?像 git checkout -- "!*.xml"
    【解决方案2】:
    find . -name '*.xml' -print0 | xargs -0 git checkout HEAD
    

    如果您的系统没有findxargs,则或类似的东西。或者只是zsh 中的git checkout HEAD **/*.xml 或任何其他具有这种形式的reqursive globbing 的shell。

    【讨论】:

      【解决方案3】:

      感谢大家的回复,但我找到了对我来说最准确的解决方案:

      git diff --name-only -- '*.xml' | sed 's, ,\\&,g' | xargs git checkout --
      

      sed 是用户逃避困扰 xargs 的空间,并且一切工作都非常快速和准确。

      【讨论】:

      • 看我的回答,你不需要所有这些:)
      猜你喜欢
      • 2020-12-22
      • 2011-03-15
      • 2015-02-07
      • 1970-01-01
      • 2020-05-03
      • 1970-01-01
      • 1970-01-01
      • 2011-02-06
      • 1970-01-01
      相关资源
      最近更新 更多