每次提交时都会使用Git diff工具吗?

时间:2012-07-26 16:04:50

标签: git diff git-diff difftool

我想运行git difftool HEAD~3.. path/to/file并让git为这三个提交中的每个提交打开difftool,以便我可以看到每个提交的并排视图。

我如何才能获得git-difftool呢?

5 个答案:

答案 0 :(得分:8)

或者您可以运行git log -p - 它与您想要的几乎相同

答案 1 :(得分:5)

这将完成您所描述的内容:

git difftool HEAD~3 HEAD~2 path/to/file
git difftool HEAD~2 HEAD~1 path/to/file
git difftool HEAD~1 HEAD path/to/file

想要自动执行此流程吗?总是三次提交吗?你想要一个三方合并吗?

<强>更新

如果答案是肯定 - 是 - 否,解决方案将是:

for i in {3..1}; do
  git difftool HEAD~$i HEAD~$((i-1)) path/to/file
done

<强>更新

如果答案是肯定的 - 不是,那基本上就是@ruffin问here。在那里看到我的答案。

答案 2 :(得分:1)

更新:

Matthieu Moy提出了更好的变体:

for rev in $(git rev-list <committish>.. ); do
    git difftool ${rev} ${rev}~1;
    done

答案的旧版本:

我会说你做的事情如下:

git rev-list <commitish>.. | wc -l

git log --oneline <commitish>.. | wc -l

这将计算您的<commitish>和HEAD之间的修订数量。

然后使用此数字,您可以自动运行提交以查看差异

c=`git log --online <commitish>.. | wc -l`

while ! ${c} eq 0 ; do

git difftool HEAD~${c} HEAD~${($c-1)}
c=${c}-1
done

答案 3 :(得分:0)

for i in 1 2 3
do
  ((j=${i}-1))
  git difftool HEAD~${i}..HEAD~${j} path/to/file &
done

答案 4 :(得分:0)

略有不同的方法:

1)执行交互式rebase

git rebase -i <commitish>

2)标记所有要提交的提交

3)对于每次提交运行

git difftool HEAD~1

4)转到下一个提交并重复步骤3

git rebase --continue

额外的好处是,如果您在审核中发现问题,那么您已经检出了要修复的提交。