Git撤消对某些文件的更改,同时保留涉及大量文件的其他文件

时间:2014-09-16 15:49:18

标签: git version-control

我在Windows上使用git-bash。我做了一个影响多个文件(大约500个)的更改

现在,问题是一半的更改不应该发生,我需要撤消对这些文件所做的所有更改。所有更改都是非分段更改。

如果只涉及少量文件(10-15),我可以直接添加我需要的文件,并使用git stash -u --keep-index存储其余文件。但是涉及的文件数量使得使用git addgit checkout -- filename并处理每个文件变得更加困难。

是否有任何建议如何处理如此大量的文件,并立即添加我需要的文件或还原不需要的文件的更改?

谢谢

1 个答案:

答案 0 :(得分:1)

执行您尝试执行的操作的最简单方法可能是利用find实用程序。请注意,这与Windows {find不同;如果你正在使用Git bash,你应该有正确的。

由于find可能有点棘手,我想确保它通过echo提供我期望的结果:

find src/com/mycomp/files -type f -name "*.java" ! -name "*Main.java" -exec echo git checkout -- {} \;

我会在这里分解命令:

  • find是您正在运行的命令
  • src/com/mycomp/files是查看
  • 的根目录
  • -type f说只考虑文件,而不是目录或符号链接
  • -name "*.java"说要查看以.java结尾但
  • 的文件
  • ! -name "*Main.java"表示不包含任何以Main.java
  • 结尾的内容
  • -exec告诉find对找到的文件运行以下命令
  • echo打印出它的参数,实际上让我们预览命令
  • git checkout -- {}是我们最终要运行的命令,find替换{}
  • 找到的文件名
  • 最后,\;表示为每个文件运行一次命令,而不是将所有文件一起处理。

如果一切正常,我会编辑命令以删除echo并再次运行。