【问题标题】:Git status compared to different remoteGit状态与不同远程的比较
【发布时间】:2016-02-15 06:14:09
【问题描述】:

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

git fetch work
git status work/branch_name

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

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

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

谢谢

【问题讨论】:

    标签: git git-status


    【解决方案1】:

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

    除了修改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 右侧分支上的提交,2 不包括位于左侧分支上的任何提交,而--count 使git rev-list 仅打印选择中的提交count;所以第一个命令让你“提交他们没有的承诺”(你的“领先”计数),第二个让你“承诺他们有你没有的”(你的“落后”计数)。

    将两者与外壳结合起来:

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

    (填写... 部分,我省略了这些部分以使线条适合)。将其设置为 git 或 shell 别名就可以了。


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

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

    【讨论】:

    • 不错!我以前从未使用过git rev-list。 Git 是如此庞大的软件包,我不断发现我不知道的功能。
    • git rev-list 实际上是 git 中真正的大功臣之一。许多其他 git 命令运行它,无论它们是 shell 脚本(交互式变基)还是 C 程序(git push),以便找出它们需要的对象。
    猜你喜欢
    • 1970-01-01
    • 2010-12-20
    • 2018-03-31
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    • 2019-07-02
    相关资源
    最近更新 更多