主机和分支之间的git前进/后退信息?
我在本地repo(主机和分支之间的git前进/后退信息?,git,github,Git,Github,我在本地repo(testbranch)中创建了一个用于测试的分支,并将其推送到了Github 如果我转到我的Github帐户并选择此测试分支,它将显示以下信息: This branch is 1 commit ahead and 2 commits behind master 我的问题是: 如何在本地显示此信息(即:在终端上显示此信息的命令,而不必打开Github查看) 我知道我可以使用以下工具查看分支之间的差异: git diff master..test-branch 或者使用Meld
testbranch
)中创建了一个用于测试的分支,并将其推送到了Github
如果我转到我的Github
帐户并选择此测试分支
,它将显示以下信息:
This branch is 1 commit ahead and 2 commits behind master
我的问题是:
Github
查看)git diff master..test-branch
或者使用Meld
(我更喜欢):
但我想知道是否有一种方法可以分别看到前面和后面的承诺。也就是说:有没有一种方法可以表明,1个人先做出承诺,然后这2个人再做出承诺在执行git获取之后,可以运行git status来显示本地分支在远程版本的分支之前或之后的提交数量
不过,这不会显示在不同分支之前或之后有多少次提交。您可以选择完全不同,查看github,或者使用类似上面链接的Vimhsa的解决方案:首先,要查看您在本地落后了多少修订,您应该执行
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状态-sb:
$ git status -sb
## master...origin/master [ahead 2, behind 1]
事实上,我将其别名为gits,这是我用于检查状态的主要命令
要查看master
的“前修订版”中的差异,我可以从origin/master
中排除“后修订版”:
git diff master..origin/master^
git diff origin/master..master^^
要查看origin/master
的“后修订版”中的差异,我可以从master
中排除“前修订版”:
git diff master..origin/master^
git diff origin/master..master^^
如果前面或后面有5个修订版,那么这样写可能更容易:
git diff master..origin/master~5
git diff origin/master..master~5
git branch --track test-branch
<bba27b56ad7072e281d529d4845e4edf877eb7d7 unique commit 2 on master
<dad0b69ec50ea57b076bfecabf2cc7c8a652bb6f unique commit 1 on master
>4bfad52fbcf0e60d78d06661d5c06b59c98ac8fd unique commit 1 on test-branch
更新
要查看前/后修订,必须将分支配置为跟踪另一个分支。对我来说,这是克隆远程存储库时以及使用git push-u remotename branchname
推送分支后的默认行为。我的版本是1.8.4.3,但在我记忆中它一直是这样工作的
从版本1.8开始,您可以如下设置跟踪分支:
git diff master..origin/master~5
git diff origin/master..master~5
git branch --track test-branch
<bba27b56ad7072e281d529d4845e4edf877eb7d7 unique commit 2 on master
<dad0b69ec50ea57b076bfecabf2cc7c8a652bb6f unique commit 1 on master
>4bfad52fbcf0e60d78d06661d5c06b59c98ac8fd unique commit 1 on test-branch
从1.7版开始,语法有所不同:
git branch --set-upstream test-branch
第一部分
作为对问题1的回答,我发现了一个技巧,可以比较两个分支,并显示每个分支的提交数领先于另一个分支(这是对问题1的更一般的回答):
对于本地分支机构:
git版本列表--左-右--计数主机…测试分支
对于远程分支:
git版本列表--从左到右--计数原点/主…原点/测试分支
这将产生如下输出:
21
这个输出意味着:“与master
相比,testbranch
提前提交1次,延迟提交2次。”
您还可以将本地分支与远程分支进行比较,例如,origin/master…master
,以了解本地分支(此处master
)在其远程对应分支之前/之后的提交数量
第二部分
要回答问题的第二部分,解决方案取决于您想要实现的目标
查看提交内容
为了让git rev list
返回两侧唯一的提交的确切列表,请将--count
参数替换为类似--pretty=oneline
的内容,以执行完整的命令:
git rev list--left-right--pretty=oneline master…测试分支
这将生成如下输出:
git diff master..origin/master~5
git diff origin/master..master~5
git branch --track test-branch
<bba27b56ad7072e281d529d4845e4edf877eb7d7 unique commit 2 on master
<dad0b69ec50ea57b076bfecabf2cc7c8a652bb6f unique commit 1 on master
>4bfad52fbcf0e60d78d06661d5c06b59c98ac8fd unique commit 1 on test-branch
git diff c22faff7..master
显示仅找到的所有提交的差异测试分支
测试分支
使用Git 2.5+,您现在有了另一个选项,可以查看配置为推送到分支的所有分支的前进/后退
git for-each-ref --format="%(push:track)" refs/heads
更多信息请参见“”您还可以使用
awk
使其更漂亮一点:
git rev-list --left-right --count origin/develop...feature-branch | awk '{print "Behind "$1" - Ahead "$2""}'
您甚至可以创建一个别名,该别名始终首先获取原点,然后比较分支
commit-diff = !"git fetch &> /dev/null && git rev-list --left-right --count"
要获取当前要素分支在主节点之前提交的数量,可以使用以下命令:
git版本列表--从左到右--计数主机…$(git分支--显示当前数据)
git 2.5+(2015年第2季度)将为每个参考引入git--format=“%(推送:跟踪)”参考/磁头
。请看,因为我无法使用我将要编写的关键字找到这个问题,所以我只想注意,这相当于在构成这些分支的提交集之间进行比较(然后计算元素)。希望这能成为搜索引擎索引。非常有用!为了帮助您通过搜索引擎找到这一点,我将添加一个两个数字都是复数的示例:此分支前面有164个提交,后面有85个提交。
您使用的是什么版本的git
?我无法重现使用git status
或git status-sb
获得的结果。如果我尝试任何一个命令(在执行git fetch
之后),我都不会得到任何关于前/后提交的信息。您查看前/后提交的方式应用于master
和origin/master
,我想查看master
和另一个分支测试分支的差异。你能重新格式化你的答案来解决这个问题吗?只有当我在分支名称之间使用3个点(不是2个点)时,“后面”和“前面”版本中的差异才对我有效。在这里,^和^^似乎并不重要,例如:git diff master…origin/master git diff origin/master…master总之,“git status-sb”非常有用。这是一个gre