Git 与不同遥控器相比的状态
Git status compared to different remote
已经有人问过类似的问题 here,但我认为它被误解了(或者我误解了问题)。所以让我在这里问清楚。当我执行 git status
时,我得到(除其他外)一条线,告诉我我是否落后于(或从)我正在跟踪的远程分支。这很棒。但是,我有不止一个遥控器。我有一个 'official' 远程(源),它是共享的(只有当东西是 'ready' 时我才会推送),还有一个 'personal' 远程(工作),我用它来推送东西来自 home/work,以便我在切换计算机时可以继续工作。现在,当我执行 git status
时,会将本地分支与 origin/branch_name
(或我正在跟踪的任何远程分支)进行比较。但是,我也想将它与其他 remotes/branches 进行比较,但不拉,只是比较。理想情况下,我想做这样的事情:
git fetch work
git status work/branch_name
并获取我的本地分支机构与 work/branch_name 的 状态 比较。
请注意,我不想做 diff,也就是说,我对 files/paths 有什么不同不感兴趣。我只是想看看 if/when 两个分支是否分叉,或者是否一个在另一个之前。
另请注意,我可以使用 gitk --all
以图形方式获取此信息,查看两个分支在树中的位置,但我想从命令行执行此操作。此外,如果有多个分支,显示为 gitk --all
的树可能会很乱。
谢谢
不幸的是,git status
总是使用当前配置的上游,即查看您当前的分支(我们称之为 $branch
)然后检查branch.<em>$branch</em>.remote
和 branch.<em>$branch</em> 的配置值。合并
.
除了修改 git status
以使用 --pretend-upstream
标志或类似的东西外,您只有两个选择:重新配置上游(可能是临时的),或模拟 git status
。由于您只需要提交计数,事实证明这相对容易:我们只需要知道所需上游的名称即可。
为了使其完全通用,您可以发明类似 branch.<em>$branch</em>.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 right-hand-side 分支上的提交,2 排除任何提交在 left-hand 侧分支上,并且 --count
使 git rev-list
仅打印选择中的 count 提交;所以第一个命令让你 "commits you have that they don't" (你的 "ahead" 计数),第二个命令让你 "commits they have that you don't" (你的 "behind" 计数)。
将两者结合 shell:
echo "vs work/branch_name: ahead $(git rev-list ...), behind $(git rev-list ...)"
(填写 ...
部分,我将其遗漏以使线条适合)。将其设置为 git 或 shell 别名就可以了。
1更准确地说,"reachable from":即提交本身或其任何 parents、grandparents 等.
2更准确地说,任何标识提交或可用于定位提交的内容(例如,带注释的标签)。
已经有人问过类似的问题 here,但我认为它被误解了(或者我误解了问题)。所以让我在这里问清楚。当我执行 git status
时,我得到(除其他外)一条线,告诉我我是否落后于(或从)我正在跟踪的远程分支。这很棒。但是,我有不止一个遥控器。我有一个 'official' 远程(源),它是共享的(只有当东西是 'ready' 时我才会推送),还有一个 'personal' 远程(工作),我用它来推送东西来自 home/work,以便我在切换计算机时可以继续工作。现在,当我执行 git status
时,会将本地分支与 origin/branch_name
(或我正在跟踪的任何远程分支)进行比较。但是,我也想将它与其他 remotes/branches 进行比较,但不拉,只是比较。理想情况下,我想做这样的事情:
git fetch work
git status work/branch_name
并获取我的本地分支机构与 work/branch_name 的 状态 比较。
请注意,我不想做 diff,也就是说,我对 files/paths 有什么不同不感兴趣。我只是想看看 if/when 两个分支是否分叉,或者是否一个在另一个之前。
另请注意,我可以使用 gitk --all
以图形方式获取此信息,查看两个分支在树中的位置,但我想从命令行执行此操作。此外,如果有多个分支,显示为 gitk --all
的树可能会很乱。
谢谢
不幸的是,git status
总是使用当前配置的上游,即查看您当前的分支(我们称之为 $branch
)然后检查branch.<em>$branch</em>.remote
和 branch.<em>$branch</em> 的配置值。合并
.
除了修改 git status
以使用 --pretend-upstream
标志或类似的东西外,您只有两个选择:重新配置上游(可能是临时的),或模拟 git status
。由于您只需要提交计数,事实证明这相对容易:我们只需要知道所需上游的名称即可。
为了使其完全通用,您可以发明类似 branch.<em>$branch</em>.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 right-hand-side 分支上的提交,2 排除任何提交在 left-hand 侧分支上,并且 --count
使 git rev-list
仅打印选择中的 count 提交;所以第一个命令让你 "commits you have that they don't" (你的 "ahead" 计数),第二个命令让你 "commits they have that you don't" (你的 "behind" 计数)。
将两者结合 shell:
echo "vs work/branch_name: ahead $(git rev-list ...), behind $(git rev-list ...)"
(填写 ...
部分,我将其遗漏以使线条适合)。将其设置为 git 或 shell 别名就可以了。
1更准确地说,"reachable from":即提交本身或其任何 parents、grandparents 等.
2更准确地说,任何标识提交或可用于定位提交的内容(例如,带注释的标签)。