仅分阶段包含Git中特定更改的文件

时间:2012-02-29 20:19:47

标签: git

我想升级到较新版本的CMS,其开发在Git中进行跟踪。由于CMS更新是在新的一年,因此每个文件的版权日期都会从2011年到2012年发生。

我可以使用git gui直观地检查和分阶段获取版权问题的文件。但是,似乎我应该能够告诉git只播放那些只有变化的文件:

- * @copyright  Copyright (c) 2008 - 2011, EllisLab, Inc.
+ * @copyright  Copyright (c) 2008 - 2012, EllisLab, Inc.

有几千个文件发生了变化,但绝大多数文件没有收到任何其他变化。我想暂存并提交这个简单的版权日期,然后仔细查看那些接收更多实质性更改的文件。

这个目的可以通过两种可能的方式实现:

  1. 暂存并仅提交仅包含此更改的文件。
  2. 从所有文件暂存并提交此更改。
  3. 是否有可能?提前谢谢!

2 个答案:

答案 0 :(得分:3)

我最近不得不做Magento升级的确切事情。 90%的变更只是更新版权线。所以我想出了以下“单线”。

git diff -G '@copyright.*[Cc]opyright' --name-only | xargs -I {} sh -c 'FILE={} ; [ $(git diff -U0 -- $FILE | wc -l | tr -d " " | cut -f1-) -eq 7 ] && git add $FILE'

如果您想要安全并首先验证事物,请将最后一部分更改为“echo git add $ FILE”,以便它只打印出命令。

答案 1 :(得分:1)

我担心我的答案顺序相反,但是......

2只分阶段:

 git add --patch

这是一个相当手动的方法,所以这可能节省一些时间,让你只能审查那些有相关变化的人,

for i in $(gd -SYOURCHANGESTRING | sed -rn 's/^diff --git a\/(\S+).*$/\1/p'); do git add --patch "$i"; done

1将所有具有更改字符串的文件暂存。

这样的事情:

git diff -SYOURCHANGESTRING | sed -rn 's/^diff --git a\/(\S+).*$/\1/p' | xargs -n1 git add