与所有人一样,我经常会有多个带有更改的文件,能够调用一个单独区分每个文件并循环更改的命令会很好,是可能还是我需要为此编写脚本?
谢谢
编辑:为了澄清我正在寻找的流的类型是我做“git diff cycle-files ”并且它带来了第一个带有更改的文件,我查看那些更改然后我点击N或其他东西,它会将我带到下一个文件,冲洗重复,直到我查看所有单独更改的文件。
答案 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 --numstat
与awk
结合使用以获取已更改文件的列表:
[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