5

这里,但我认为它被误解了(或者我可能误解了这个问题)。所以让我在这里问清楚。当我这样做时,我(除其他外)会收到一条线,告诉我我是否落后于(或从)我正在跟踪的远程分支。这很棒。但是,我有不止一个遥控器。我有一个“官方”遥控器(来源),它是共享的(我只在东西“准备好”时推送)和一个“个人”遥控器(工作),我用来从家里/工作中推送东西,所以换电脑后还能继续工作。现在,当我这样做时,将本地分支与已经提出了一个类似的问题(或者我正在跟踪的任何远程分支)。但是,我也想将它与其他遥控器/分支进行比较,但不要拉,只是比较。理想情况下,我想做这样的事情:git statusgit statusorigin/branch_name

git fetch work
git status work/branch_name

并获得我的本地分支与工作/分支名称的状态比较。

请注意,我不想做差异,也就是说,我对哪些文件/路径不同不感兴趣。我只想看看两个分支是否/何时分叉,或者一个是否领先于另一个。

另请注意,我可以使用 以图形方式获取此信息gitk --all,查看两个分支在树中的位置,但我想从命令行执行此操作。此外,在多个分支的情况下,显示的树gitk --all可能会一团糟。

谢谢

4

1 回答 1

4

不幸的是,git status总是使用当前配置的上游,即查看您当前的分支(让我们称之为 this $branch),然后检查 and 的配置值。branch.$branch.remotebranch.$branch.merge

除了修改git status以获取--pretend-upstream标志或类似内容之外,您只有两个选择:重新配置上游(可能是暂时的),或模拟git status. 由于您只需要提交的计数,事实证明这相对容易:我们只需要知道所需上游的名称。

为了使这完全通用,您可能会发明类似或其他的东西,并循环输出,但要硬连线一个特定的,您可以这样做:branch.$branch.extstatusgit config --get-allwork/branch_name

git rev-list --count work/branch_name..HEAD

和:

git rev-list --count HEAD..work/branch_name

..符号选择1右侧分支上的提交,2排除左侧分支上的任何提交,并--countgit rev-list打印选择中的提交计数;所以第一个命令让你“承诺你有他们没有”(你的“领先”计数),第二个让你“承诺他们有你没有”(你的“落后”计数)。

将两者与外壳结合起来:

echo "vs work/branch_name: ahead $(git rev-list ...), behind $(git rev-list ...)"

(填写...我遗漏的部分以使线条适合)。将其设置为 git 或 shell 别名就可以了。


1更准确地说,“可访问自”:即提交本身或其任何父母、祖父母等。

2更准确地说,任何标识提交或可用于定位提交的内容(例如,带注释的标签)。

于 2015-11-13T16:25:34.010 回答