可以通过命令行git diff循环更改文件吗?

时间:2013-12-13 17:53:01

标签: git diff

与所有人一样,我经常会有多个带有更改的文件,能够调用一个单独区分每个文件并循环更改的命令会很好,是可能还是我需要为此编写脚本?

谢谢

编辑:为了澄清我正在寻找的流的类型是我做“git diff cycle-files ”并且它带来了第一个带有更改的文件,我查看那些更改然后我点击N或其他东西,它会将我带到下一个文件,冲洗重复,直到我查看所有单独更改的文件。

4 个答案:

答案 0 :(得分:2)

要使用差异块循环浏览每个已更改的文件,选择要在下次提交中包含哪些部分,请使用:

git add -p .

那是"部分添加"。如果你回答"否"对于每个块,它等同于您要查找的git diff

答案 1 :(得分:1)

如果你有GNU xargs,你可以:

git diff --name-only | xargs -I{} sh -c 'git diff {} | less'

将各个差异传递给较少的。

答案 2 :(得分:0)

我不知道你的意思是循环,但git diff将显示每个更改的文件(在指定的文件夹中):

[timwolla@/tmp/test master]git diff
diff --git a/a b/a
index f70f10e..0653421 100644
--- a/a
+++ b/a
@@ -1 +1,2 @@
 A
+a
diff --git a/b b/b
index 223b783..167f258 100644
--- a/b
+++ b/b
@@ -1 +1,2 @@
 B
+b

如果您确实需要在每个文件上调用命令,可以将git diff --numstatawk结合使用以获取已更改文件的列表:

[timwolla@/tmp/test master]git diff --numstat |awk '{print $3}'
a
b

如果通过xargs管道输出,则可以在每个文件上调用该命令:

[timwolla@/tmp/test master]git diff --numstat |awk '{print $3}' |xargs cat
A
a
B
b

答案 3 :(得分:0)

这似乎做你想要的。 3路输出非常难看。您需要diffutils中的diff3。 然后将以下内容放在名为dif的脚本中(我使用zsh您可以使用其他内容)。

#!/bin/sh 

diff3 $1 $BASE $2

然后使用git difftool -x ./dif运行此操作。这将在每个更改的文件上运行diff3,该文件会发出更改摘要。然后,您可以选择步进下一个文件。你可以调整diff3参数,但我没有找到任何看起来不错的东西。

我们可以得到一个更好的两列差异,类似于你在这个脚本的图形差异工具中看到的

#!/usr/bin/env zsh

diff -y --suppress-common-lines $1 $2 | less