Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较不同远程服务器的Git状态_Git_Git Status - Fatal编程技术网

比较不同远程服务器的Git状态

比较不同远程服务器的Git状态,git,git-status,Git,Git Status,已经有人问过类似的问题,但我认为它被误解了(或者我误解了这个问题)。所以让我在这里明确地问一下。当我执行git status时,我会收到一条(除其他内容外)线路,告诉我是否在我跟踪的远程分支后面(或分叉)。这太棒了。然而,我有不止一个遥控器。我有一个“官方”遥控器(来源),它是共享的(只有当东西“准备好”时我才推到那里),还有一个“个人”遥控器(工作),我用它从家里/工作地点推东西,这样我在换电脑时可以继续工作。现在,当我执行git status时,本地分支将与origin/branch\u n

已经有人问过类似的问题,但我认为它被误解了(或者我误解了这个问题)。所以让我在这里明确地问一下。当我执行
git status
时,我会收到一条(除其他内容外)线路,告诉我是否在我跟踪的远程分支后面(或分叉)。这太棒了。然而,我有不止一个遥控器。我有一个“官方”遥控器(来源),它是共享的(只有当东西“准备好”时我才推到那里),还有一个“个人”遥控器(工作),我用它从家里/工作地点推东西,这样我在换电脑时可以继续工作。现在,当我执行
git status
时,本地分支将与
origin/branch\u name
(或我正在跟踪的任何远程分支)进行比较。然而,我想将它与其他远程/分支进行比较,但不需要拉,只需进行比较。理想情况下,我想做这样的事情:

git fetch work
git status work/branch_name
并将我的本地分支机构与工作/分支机构名称进行比较

请注意,我不想进行区分,也就是说,我对哪些文件/路径不同不感兴趣。我只是想看看这两个分支是分叉还是一个在另一个之前

还请注意,我可以使用
gitk--all
以图形方式获取这些信息,查看两个分支在树中的位置,但我希望从命令行执行此操作。此外,在多个分支的情况下,用
gitk--all
显示的树可能会很混乱


谢谢

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

除了修改
git状态
以采用
--假装上游
标志或类似标志外,您只有两个选择:重新配置上游(可能暂时),或模拟
git状态
。因为您只需要一个提交计数,所以这相对容易:我们只需要知道所需上游的名称

要使其完全通用,您可以发明类似于
branch.$branch.extstatus
之类的东西,并在
git config中循环——获取所有的
输出,但只需硬连线一个特定的
工作/分支名称即可:

git rev-list --count work/branch_name..HEAD
以及:

符号选择位于1右侧分支上的提交,2排除位于左侧分支上的任何提交,
--count
使
git rev list
仅打印选择中的提交计数;因此,第一个命令让你“提交你拥有的而他们没有”(你的“前进”计数),第二个命令让你“提交他们拥有的而你没有”(你的“落后”计数)

将两者与外壳结合起来:

echo "vs work/branch_name: ahead $(git rev-list ...), behind $(git rev-list ...)"
(填写
部分,我省略了这些部分,以使行适合)。将其设置为git或shell别名,就可以了


1更准确地说,“可从以下方面获得”:即,提交人本身或其任何父母、祖父母等


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

Nice!我以前从未使用过
git rev list
。Git是一个如此庞大的软件包,我一直在发现我不知道的特性。
Git rev list
实际上是Git中非常重要的工作之一。许多其他git命令运行它,无论是shell脚本(交互式rebase)还是C程序(
gitpush
),都是为了找到它们需要的对象。
echo "vs work/branch_name: ahead $(git rev-list ...), behind $(git rev-list ...)"