我想运行
如何才能让git-difftool实现这个功能?
git difftool HEAD~3.. path/to/file
命令,让git为这三个提交打开difftool工具,以便我可以查看每个提交的并排视图。如何才能让git-difftool实现这个功能?
或者你可以直接运行git log -p
- 它几乎可以做到你想要的相同的事情。
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在这里所问的内容。请查看我在那里的回答。
更新:
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
wc -l
计数,然后再用HEAD~number
迭代,当你可以直接用for rev in $(git rev-list ...)
在修订版本上进行迭代呢?如果commitish
和HEAD
之间的历史有合并,你的方法就不起作用了:commitish
可以是HEAD~n
,而commitish..HEAD
可能包含超过n
个提交... - Matthieu Moyfor i in 1 2 3
do
((j=${i}-1))
git difftool HEAD~${i}..HEAD~${j} path/to/file &
done
git difftool HEAD~${i}.. path/to/file &
存在两个错误:(1) 标准输入不是 tty (2) 不显示提交记录,而是显示先前状态和当前状态之间的差异。请查看我的答案以获取修复方法。 - Antony Hatchkinsdiff.tool
设置为什么(在我的配置中是meld
)。 - twalbergemerge
、vimdiff
)。 - Antony Hatchkinsgit rebase -i <commitish>
2) 标记所有需要编辑的提交
3) 对于每个提交运行
git difftool HEAD~1
4) 转到下一个提交并重复第3步
git rebase --continue
另一个优点是,如果您在审核中发现问题,您已经检查过要修复的提交。