master和分支之间的git提前/落后信息?

jjhzyzn0  于 2023-04-19  发布在  Git
关注(0)|答案(6)|浏览(451)

我已经在本地仓库(test-branch)中创建了一个用于测试的分支,并将其推送到Github
如果我转到我的Github帐户并选择此test-branch,它会显示以下信息:

This branch is 1 commit ahead and 2 commits behind master

我的问题是:
1.如何在本地显示此信息(即:一个在终端上显示它的命令,而不是必须打开Github才能看到它)?
1.我知道我可以看到分支之间的差异使用:

git diff master..test-branch

或者使用Meld(我更喜欢):

git difftool master..test-branch

但我想知道是否有一种方法可以分别看到 aheadbehind 提交。即:有没有一种方法来显示 *1提交提前 * 本身,然后那些 *2提交落后 * 本身?

7gyucuyw

7gyucuyw1#

第一部分

作为对问题1的回答,我发现了一个比较两个分支并显示每个分支领先于另一个分支多少提交的技巧(对问题1的更一般的回答):

本地分行:git rev-list --left-right --count master...test-branch

对于远程分支:git rev-list --left-right --count origin/master...origin/test-branch
输出如下:
2 1
该输出意味着:与master相比,test-branch提前1次提交,滞后2次提交。
你也可以将本地分支与远程分支进行比较,例如origin/master...master,以找出本地分支(这里是master)领先/落后于远程分支的提交数量。

第二部分

回答你问题的第二部分,解决方案取决于你到底想实现什么。

查看提交

为了让git rev-list返回在任何一方都是唯一的提交的确切列表,将--count参数替换为类似--pretty=oneline的东西,使完整的命令执行:

git rev-list --left-right --pretty=oneline master...test-branch

这将生成如下输出:

<bba27b56ad7072e281d529d4845e4edf877eb7d7 unique commit 2 on master
<dad0b69ec50ea57b076bfecabf2cc7c8a652bb6f unique commit 1 on master
>4bfad52fbcf0e60d78d06661d5c06b59c98ac8fd unique commit 1 on test-branch

在这里,每个提交sha的前面都有<>,以表明它可以在哪个分支上找到(左或右,这里分别是mastertest-branch)。

查看代码

如果你想查看所有新提交的差异,你需要分两步来完成:
1.定义最近的共同祖先

$ git merge-base master test-branch
c22faff7468d6d5caef217ac6b82f3ed95e9d902
  1. diff任一分支到上面获得的提交sha(短格式通常可以)
    显示仅在master上找到的所有提交的差异
git diff c22faff7..master

要显示所有提交的差异,请仅找到test-branch

git diff c22faff7..test-branch
bjp0bcyl

bjp0bcyl2#

首先,要查看您在本地落后了多少修订版本,您应该执行git fetch以确保您从远程获得最新信息。
git status的默认输出告诉你你领先或落后了多少个版本,但通常我觉得这太冗长了:

$ git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 2 and 1 different commit each, respectively.
#
nothing to commit (working directory clean)

我更喜欢git status -sb

$ git status -sb
## master...origin/master [ahead 2, behind 1]

实际上,我将其简称为git s,这是我用于检查状态的主要命令。
要查看master的“提前修订版”中的差异,我可以从origin/master中排除“落后修订版”:

git diff master..origin/master^

要查看origin/master的“behind revisions”中的差异,我可以从master中排除“ahead revisions”:

git diff origin/master..master^^

如果前面或后面有5个修订版本,可能更容易这样写:

git diff master..origin/master~5
git diff origin/master..master~5

更新

要查看超前/滞后版本,必须将分支配置为跟踪另一个分支。对我来说,这是当我克隆远程仓库时的默认行为,并且在我使用git push -u remotename branchname推送分支后。我的版本是1.8.4.3,但只要我记得,它就一直这样工作。
从版本1.8开始,您可以像这样设置跟踪分支:

git branch --track test-branch

从版本1.7开始,语法有所不同:

git branch --set-upstream test-branch
qf9go6mv

qf9go6mv3#

在Git 2.5+中,你现在有了另一个选项,可以查看所有被配置为推送到分支的分支的前/后。

git for-each-ref --format="%(push:track)" refs/heads

更多内容请参见“Viewing Unpushed Git Commits“,它举例说明了你可能想知道哪些提交还没有推送:

git log @{push}..
9vw9lbht

9vw9lbht4#

要获取当前特性分支在master之前的提交数量,您可以使用以下命令:

git rev-list --left-right --count master...$(git branch --show-current)
kg7wmglp

kg7wmglp5#

你也可以使用awk来使它更漂亮一点:

git rev-list --left-right --count  origin/develop...feature-branch | awk '{print "Behind "$1" - Ahead "$2""}'

你甚至可以创建一个别名,总是先获取origin,然后再比较分支

commit-diff = !"git fetch &> /dev/null && git rev-list --left-right --count"
aor9mmx1

aor9mmx16#

完成git fetch后,可以运行git status来显示本地分支比远程分支提前或落后多少次提交。
这并不会显示它在不同分支之前或之后的提交数量。你可以选择完整的diff,查看github,或者使用上面链接的Vimhsa这样的解决方案:所有仓库的Git状态

相关问题