如何检查两个分支是否"均匀"?

Nat*_*n H 16 git github git-branch

GitHub Web界面有一个很好的功能,告诉我一个分支是否与master分支.

是否有与此功能等效的命令行?我使用多个存储库,我正在寻找快速查看分支是否均匀或需要注意的方法.

以下是GitHub Web界面的屏幕截图,对于那些对此功能感到疑惑的人:

在此输入图像描述

在此输入图像描述

jub*_*0bs 14

GitHub术语

分支A和分支B是均匀的.

是GitHub的用语

分支A和分支B指向同一个提交.

这两个分支是否均匀?

如果你只对是否感兴趣两个分支甚至与否,没有任何额外的细节(如提交计数),脚本友好的方式是简单地测试他们对平等的提示的SHA值:

[ "$(git rev-parse <refA>)" = "$(git rev-parse <refB>)" ]
Run Code Online (Sandbox Code Playgroud)

运行此命令后,价值$?0,如果<ref1><ref2>是偶数,和1其他.因为此命令仅涉及管道Git命令git-rev-parse,所以可以安全地以编程方式使用它.

在另一个分支之前或之后有一个分支吗?

如果你想模仿GitHub的功能,比如打印

foo是n提交到bar之前

等,您可以使用以下脚本:

#!/bin/sh

# git-checkeven.sh
#
# Check whether two revisions are even, and, otherwise, to what extent
# the first revision is ahead of / behind the second revision
#
# Usage: git checkeven <revA> <revB>
#
# To make a Git alias called 'checkeven' out of this script,
# put the latter on your search path, and run
#
#   git config --global alias.checkeven '!sh git-checkeven.sh'

if [ $# -ne 2 ]; then
    printf "usage: git checkeven <revA> <revB>\n\n"
    exit 2
fi

revA=$1
revB=$2

nA2B="$(git rev-list --count $revA..$revB)"
nB2A="$(git rev-list --count $revB..$revA)"

if [ "$nA2B" -eq 0 -a "$nB2A" -eq 0 ]; then
  printf "$revA is even with $revB\n"
  exit 0
elif [ "$nA2B" -gt 0 ]; then
  printf "$revA is $nA2B commits behind $revB\n"
  exit 1
else
  printf "$revA is $nB2A commits ahead of $revB\n"
  exit 1
fi
Run Code Online (Sandbox Code Playgroud)

测试

假设玩具回购具有以下历史:

... -- * [release71]
        \
         * [master, develop]
Run Code Online (Sandbox Code Playgroud)

然后,在定义一个名为areeven调用上面脚本的Git别名后,你得到......

$ git checkeven release71 develop
release71 is 1 commits behind develop
$ git checkeven develop release71
develop is 1 commits ahead of release71
$ git checkeven master develop
master is even with develop
Run Code Online (Sandbox Code Playgroud)

  • 没问题!感谢您的剧本! (2认同)

Tim*_*sen 11

要在同一存储库中比较位于GitHub 上的分支文件,可以使用:branchmastergit diff

git diff origin/branch origin/master
Run Code Online (Sandbox Code Playgroud)

以下将用于比较两个分支之间的提交:

git log --left-right --graph --cherry-pick --oneline origin/branch...origin/master
Run Code Online (Sandbox Code Playgroud)

正如我在上面的评论中所提到的,两个分支可能具有相同的文件但提交不同.