第一部分
针对你的第一个问题的回答,这里有一个小技巧可以比较两个分支并显示每个分支相对另一个分支超前的提交数(关于你的第一个问题的更普遍的回答):
对于本地分支:
git rev-list --left-right --count master...test-branch
对于远程分支:
git rev-list --left-right --count origin/master...origin/test-branch
这会给出如下输出:
2 1
这个输出意味着: "相对于 master
, test-branch
超前了1次提交且落后了2次提交."
你也可以比较本地分支和远程分支,例如origin/master...master
来查找本地分支(这里是master
)比其远程对应分支超前/落后了多少次提交.
第二部分
要回答你问题的第二部分,解决方案取决于你想要实现什么目标.
查看提交
为了让git rev-list
返回完全独特于另一侧的提交列表,请用类似--pretty=oneline
的参数替换--count
参数,使得完整的执行命令如下:
git rev-list --left-right --pretty=oneline master...test-branch
这将生成如下输出:
<bba27b56ad7072e281d529d4845e4edf877eb7d7 unique commit 2 on master
<dad0b69ec50ea57b076bfecabf2cc7c8a652bb6f unique commit 1 on master
>4bfad52fbcf0e60d78d06661d5c06b59c98ac8fd unique commit 1 on test-branch
这里每个提交的 sha 值前面都有 <
或者 >
,用以表示它所在的分支(左边或右边,这里分别为 master
或 test-branch
)。
查看代码
如果你想要查看仅存在于其中一个分支上的所有新提交差异,你需要进行以下两个步骤:
- 定义最近的共同祖先
$ git merge-base master test-branch
c22faff7468d6d5caef217ac6b82f3ed95e9d902
- 对比任意一个分支与上面获取到的提交SHA(短格式通常就可以)
展示仅存在于主分支的所有提交的差异
git diff c22faff7..master
仅显示所有提交在test-branch中的差异
git diff c22faff7..test-branch
git for-each-ref --format="%(push:track)" refs/heads
。请参见下面的答案。 - VonC这个分支比主分支超前164次提交,落后85次提交。
- nealmcb