13

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

我将如何让 git-difftool 做到这一点?

4

5 回答 5

10

或者你可以直接运行git log -p——它做的事情几乎和你想要的一样

于 2012-07-30T17:42:36.647 回答
7

这将完成您所描述的:

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在这里提出的问题。在那里看到我的答案。

于 2012-07-30T17:39:00.457 回答
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
于 2012-08-03T17:07:30.477 回答
0
for i in 1 2 3
do
  ((j=${i}-1))
  git difftool HEAD~${i}..HEAD~${j} path/to/file &
done
于 2012-07-30T17:41:46.903 回答
0

稍微不同的方法:

1) 执行交互式变基

git rebase -i <commitish>

2) 标记所有提交以进行编辑

3) 对于每次提交运行

git difftool HEAD~1

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

git rebase --continue

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

于 2015-05-14T08:12:08.043 回答