Git状态与不同的遥控器相比

时间:2015-11-13 15:46:48

标签: git git-status

类似的问题已被提出here,但我认为它被误解了(或者我误解了这个问题)。所以让我在这里清楚地问清楚。当我做git status时,我得到(除了其他内容之外)一条线,告诉我我是否在追踪(或分叉)我跟踪的远程分支。这很棒。但是,我有多个遥控器。我有一个官员'远程(起源),这是共享的(我只有当东西准备就绪时才推到那里),以及一个“个人”的东西。远程(工作),我用来从家里/工作中推送东西,以便我可以在切换电脑时继续工作。现在,当我git status时,将本地分支与origin/branch_name(或我跟踪的任何远程分支)进行比较。但是,我也希望将它与其他遥控器/分支机构进行比较,但不需要拉动,只需比较即可。理想情况下,我想做这样的事情:

git fetch work
git status work/branch_name

并将我的本地分支与work / branch_name进行状态比较。

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

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

由于

1 个答案:

答案 0 :(得分:3)

不幸的是,git status始终使用当前配置的上游,即查看当前分支(让我们调用此 $branch ),然后检查配置branch.$branch.remotebranch.$branch.merge的值。

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

为了使这一点完全通用,您可能会发明类似branch.$branch.extstatus或其他内容的东西,并循环通过git config --get-all输出,但只需硬连线一个特定的work/branch_name即可:

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

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

..表示法选择 1 右侧分支的提交, 2 ,不包括左侧的任何提交分支和--count使git rev-list仅打印选择中提交的 count ;所以第一个命令会让你"承诺你有他们不会" (你的"未来"伯爵),第二个让你"承诺他们有你没有"#34; (你的"背后"计数)。

将两者与外壳合并:

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

(填写我遗漏的...部分以使线条合适。将其设置为git或shell别名并且你很好。

1 更确切地说,"可从"到达:即提交本身或其任何父母,祖父母等等。

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