Pau*_*ijs 12 git diff compare commit tortoisegit
使用git命令diff和difftool,Git可以很容易地比较提交之间的差异.同样在TortoiseGit中,您只需选择两个提交来比较它们.
但有没有办法比较变更集?换句话说:查看一组提交的差异与另一组提交的差异之间的差异.
这可以非常方便地比较(一组)提交,这些提交是挑选的或已被重新定位的.
我认为一般来说,为了获得你想要的东西,你必须做一些合并/ rebase操作才能创建一些可以比较的东西.
当你真正想到它时,变更集之间差异的想法是模糊的.我在这里假设你遇到这样的情况:
[other history] [ "changeset 1" ]
o - o - o - o - o ( - o - o - o - o)
\
(o - o - o - o - o)
[ "changeset 2" ]
Run Code Online (Sandbox Code Playgroud)
那么比较这两个是什么意思呢?也许在你的情况下,其他历史中的差异与两个变更集中的差异完全不相交,但一般来说,变更集1的内容可能取决于其他历史记录!这意味着git没有很好的通用方法来执行这样的操作; 要做得恰到好处,它必须基本上说"如果我重新定位,两个最终提交之间会有什么区别?" 换句话说,我认为变更集之间差异的唯一合理定义是,如果它们被重新设置为具有共同的祖先,则产生的结束提交之间的差异.当然,如果这就是你想要的,那么你将不得不在工作树中执行一个操作 - 没有别的方法来处理这样的差异.显而易见的事情是rebase,并比较新的端点(分支):
[other history] [ "changeset 1" ]
o - o - o - o - o ( - o - o - o - o)
\
(o - o - o - o - o)
[ "changeset 2'" ]
Run Code Online (Sandbox Code Playgroud)
然而,Rebases并不总是最有趣的,我可以想到一个解决这个问题的方法.假设您正确解决冲突,生成的rebase工作树应该与合并的结果相同:
[other history] [ "changeset 1" ]
o - o - o - o - o ( - o - o - o - o)
\ \
\ ------
\ \
(o - o - o - o - o) - X
[ "changeset 2" ]
Run Code Online (Sandbox Code Playgroud)
因此,您可以执行该临时合并,并将结果提交与另一个变更集的结束提交进行比较.这比做rebase快得多.(无论哪种方式,你当然会使用一次性分支,而不是真正的变更集2.)
ctc*_*rry -2
git diff end_rev_1...end_rev_2
Run Code Online (Sandbox Code Playgroud)
摘自: http: //www.kernel.org/pub/software/scm/git/docs/gitrevisions.html
类似的符号 r1...r2 称为 r1 和 r2 的对称差,并定义为 r1 r2 --not $(git merge-base --all r1 r2)。它是一组可以从 r1 或 r2 之一访问但不能同时从两者访问的提交集。
并来自 git diff 帮助:
git diff [--options] <commit>...<commit> [--] [<path>...]
This form is to view the changes on the branch containing and up to the second <commit>, starting at a
common ancestor of both <commit>. "git diff A...B" is equivalent to "git diff $(git-merge-base A B) B".
You can omit any one of <commit>, which has the same effect as using HEAD instead.
Run Code Online (Sandbox Code Playgroud)
那对你有用吗?
归档时间: |
|
查看次数: |
9196 次 |
最近记录: |