如何比较 git 中的本地和远程分支树?
How to compare local and remote branch trees in git?
This answer描述如何获取两个分支之间的(文件)差异。
我想知道如何知道我的 local 分支与 remote 分支有多少提交。
我的意思是,提交次数提前、旁边或后面
您只需键入 Git bash 中的 git status
即可获取此信息。 Git 会将您当前的本地分支与其远程跟踪分支进行比较。你会看到这样的东西:
$ git status
# On branch master
这之后会出现如下状态消息:
# Your branch is up-to-date with 'origin/master'
# Your branch is ahead of 'origin/master' by 1 commit.
# Your branch is behind 'origin/master' by 1 commit.
# Your branch is 1 commit ahead and 2 commits behind 'origin/master'
第一条消息意味着您的本地分支与远程跟踪分支完全同步。第二条和第三条消息意味着您的分支相对于远程有额外的提交,反之亦然。如果您的本地分支和远程分支在您的分支离开后都有新的提交,则会显示第四条消息。
您可以使用@{u}
upstream or @{push}
gitrevisions syntax来计算提交次数:
- 领先:
git rev-list --count ..@{u}
- 落后:
git rev-list --count @{u}..
比较两个随机分支 A
和 B
,找出有多少 A
上的提交是 B
的新提交:
git rev-list --count B..A
A
和 B
可能具有以下关系之一:
A
和B
是不相关的分支;
A
是最新的 B
;
A
领先于 B
;
A
落后于B
;
A
与 B
不同。
求与foo.sh
的关系:
#!/bin/bash
A=
B=
merge_base=$(git merge-base $A $B)
if [[ "${merge_base}" = "" ]];then
echo "$A and $B are unrelated"
else
num_new_to_A=$(git rev-list --count $A..$B)
num_new_to_B=$(git rev-list --count $B..$A)
if [[ "${num_new_to_A}" -eq 0 ]] && [[ "${num_new_to_B}" -eq 0 ]];then
echo "$A is up-to-date with $B"
elif [[ "${num_new_to_A}" -eq 0 ]] && [[ "${num_new_to_B}" -gt 0 ]];then
echo "$A is ${num_new_to_B} commits ahead of $B"
elif [[ "${num_new_to_A}" -gt 0 ]] && [[ "${num_new_to_B}" -eq 0 ]];then
echo "$A is ${num_new_to_A} commits behind $B"
elif [[ "${num_new_to_A}" -gt 0 ]] && [[ "${num_new_to_B}" -gt 0 ]];then
echo "$A is diverged with $B, ${num_new_to_B} commits ahead and ${num_new_to_A} commits behind"
else
:
fi
fi
比较master
和origin/master
:
bash foo.sh master origin/master
This answer描述如何获取两个分支之间的(文件)差异。
我想知道如何知道我的 local 分支与 remote 分支有多少提交。
我的意思是,提交次数提前、旁边或后面
您只需键入 Git bash 中的 git status
即可获取此信息。 Git 会将您当前的本地分支与其远程跟踪分支进行比较。你会看到这样的东西:
$ git status
# On branch master
这之后会出现如下状态消息:
# Your branch is up-to-date with 'origin/master'
# Your branch is ahead of 'origin/master' by 1 commit.
# Your branch is behind 'origin/master' by 1 commit.
# Your branch is 1 commit ahead and 2 commits behind 'origin/master'
第一条消息意味着您的本地分支与远程跟踪分支完全同步。第二条和第三条消息意味着您的分支相对于远程有额外的提交,反之亦然。如果您的本地分支和远程分支在您的分支离开后都有新的提交,则会显示第四条消息。
您可以使用@{u}
upstream or @{push}
gitrevisions syntax来计算提交次数:
- 领先:
git rev-list --count ..@{u}
- 落后:
git rev-list --count @{u}..
比较两个随机分支 A
和 B
,找出有多少 A
上的提交是 B
的新提交:
git rev-list --count B..A
A
和 B
可能具有以下关系之一:
A
和B
是不相关的分支;A
是最新的B
;A
领先于B
;A
落后于B
;A
与B
不同。
求与foo.sh
的关系:
#!/bin/bash
A=
B=
merge_base=$(git merge-base $A $B)
if [[ "${merge_base}" = "" ]];then
echo "$A and $B are unrelated"
else
num_new_to_A=$(git rev-list --count $A..$B)
num_new_to_B=$(git rev-list --count $B..$A)
if [[ "${num_new_to_A}" -eq 0 ]] && [[ "${num_new_to_B}" -eq 0 ]];then
echo "$A is up-to-date with $B"
elif [[ "${num_new_to_A}" -eq 0 ]] && [[ "${num_new_to_B}" -gt 0 ]];then
echo "$A is ${num_new_to_B} commits ahead of $B"
elif [[ "${num_new_to_A}" -gt 0 ]] && [[ "${num_new_to_B}" -eq 0 ]];then
echo "$A is ${num_new_to_A} commits behind $B"
elif [[ "${num_new_to_A}" -gt 0 ]] && [[ "${num_new_to_B}" -gt 0 ]];then
echo "$A is diverged with $B, ${num_new_to_B} commits ahead and ${num_new_to_A} commits behind"
else
:
fi
fi
比较master
和origin/master
:
bash foo.sh master origin/master