如果我正在开发一个功能分支,我想知道这个分支在master分支的前面或后面有多少次提交.我似乎无法找到执行此操作的命令.
使用git cherry查找提交呈现一个分支和其他不存在
git cherry -v master feature
Run Code Online (Sandbox Code Playgroud)
它将列出功能分支中存在但在主分支中不存在的所有提交。
相似地,
git cherry -v feature master
Run Code Online (Sandbox Code Playgroud)
将列出 master 分支中存在但不存在于 feature 中的所有提交。
您还可以提供额外的第三个参数来选择起点。
git cherry -v feature master 1b219e
Run Code Online (Sandbox Code Playgroud)
更新:
您可以创建一个别名来将两者结合起来
[alias]
mydiff = !sh -c 'echo "Commits in $2 not in $1" && git cherry -v $1 $2 && echo "Commits in $1 not in $2" && git cherry -v $2 $1' -
Run Code Online (Sandbox Code Playgroud)
用,
git mydiff master feature
Run Code Online (Sandbox Code Playgroud)
git rev-list一种快速的方法是git status在有"上游"时做什么.具体来说,git status只需计算当前分支上不在上游分支上的修订.例如,考虑foo具有上游的分支origin/foo,并假设您已经进行了三次本地提交,然后用于git fetch引入一个上游提交:
L - L - L <-- foo
/
... - C - C
\
U <-- origin/foo
Run Code Online (Sandbox Code Playgroud)
这里C是常见的提交,Ls是本地提交,U是上游提交.如果你在分支上foo并且你跑步,git status你会看到"前方3,落后1".
以下是git如何获取这些数字:
git rev-list foo --not origin/foo:这将生成所有提交的列表,foo但不会生成origin/foo.也就是说,从origin/foo(提交U)开始,删除提交,所有早期提交都可以访问:那是U和所有C提交.然后,从foo并查找尚未被删除的所有可到达提交:这只是三次L提交.
添加--count到git rev-list参数以使其打印计数而不是原始commit-ID SHA-1值.
重复git rev-list origin/foo --not foo:这是所有可以从origin/foo但不能从中foo提交的提交,在这个例子中只是提交U.(再次,添加--count以获取计数,而不是实际的提交ID.)
请注意,foo --not origin/foo也拼写origin/foo..foo在gitrevisions语法.(在git status它始终查看当前分支的情况下- 通过HEAD- 及其上游命名.您可以使用@{upstream}语法获取上游的名称,或将其缩短为@{u}; HEAD如果您在列表中没有列出名称,则默认为所有;所以重新实现git status你可以看看git rev-list --count ..@{u}和git rev-list --count @{u}...)
rev-list当地的分支机构,使用VSgit cherry因此,如果你想计算从分支feature而不是从分支master可以访问的提交,你可以做同样的事情,但使用名称feature和master.该git rev-list语法master..feature的名字都提交的ID从可达feature但不能从master,并--count会得到你一个数:
git rev-list --count master..feature
Run Code Online (Sandbox Code Playgroud)
但是,如果您已经从一个分支到另一个分支中选择了一些提交,那么它们具有不同的提交ID但是相同的差异,这将"过度计数".例如,假设feature有五个提交没有master,但是你(或某个人)已经决定应该挑选出这五个提交中的一个master,你现在可能有这个:
D - E - F - G - H <-- feature
/
... - C - C
\
F' <-- master
Run Code Online (Sandbox Code Playgroud)
where F'基本上只是提交的副本F.如果你问git rev-list计数提交的feature使不上master,你会得到5; 但如果你问git cherry上找到提交feature上没有的master,它会清除提交F其从清单中,因为它会看到,F'是的副本F.如果算上你列出的提交,git cherry那么你将获得4,而不是5.
| 归档时间: |
|
| 查看次数: |
4137 次 |
| 最近记录: |