我已经在本地仓库(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
但我想知道是否有一种方法可以分别看到 ahead 和 behind 提交。即:有没有一种方法来显示 *1提交提前 * 本身,然后那些 *2提交落后 * 本身?
6条答案
按热度按时间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
的东西,使完整的命令执行:这将生成如下输出:
在这里,每个提交sha的前面都有
<
或>
,以表明它可以在哪个分支上找到(左或右,这里分别是master
或test-branch
)。查看代码
如果你想查看所有新提交的差异,你需要分两步来完成:
1.定义最近的共同祖先
显示仅在master上找到的所有提交的差异
要显示所有提交的差异,请仅找到test-branch
bjp0bcyl2#
首先,要查看您在本地落后了多少修订版本,您应该执行
git fetch
以确保您从远程获得最新信息。git status
的默认输出告诉你你领先或落后了多少个版本,但通常我觉得这太冗长了:我更喜欢
git status -sb
:实际上,我将其简称为
git s
,这是我用于检查状态的主要命令。要查看
master
的“提前修订版”中的差异,我可以从origin/master
中排除“落后修订版”:要查看
origin/master
的“behind revisions”中的差异,我可以从master
中排除“ahead revisions”:如果前面或后面有5个修订版本,可能更容易这样写:
更新
要查看超前/滞后版本,必须将分支配置为跟踪另一个分支。对我来说,这是当我克隆远程仓库时的默认行为,并且在我使用
git push -u remotename branchname
推送分支后。我的版本是1.8.4.3,但只要我记得,它就一直这样工作。从版本1.8开始,您可以像这样设置跟踪分支:
从版本1.7开始,语法有所不同:
qf9go6mv3#
在Git 2.5+中,你现在有了另一个选项,可以查看所有被配置为推送到分支的分支的前/后。
更多内容请参见“Viewing Unpushed Git Commits“,它举例说明了你可能想知道哪些提交还没有推送:
9vw9lbht4#
要获取当前特性分支在master之前的提交数量,您可以使用以下命令:
kg7wmglp5#
你也可以使用
awk
来使它更漂亮一点:你甚至可以创建一个别名,总是先获取origin,然后再比较分支
aor9mmx16#
完成git fetch后,可以运行git status来显示本地分支比远程分支提前或落后多少次提交。
这并不会显示它在不同分支之前或之后的提交数量。你可以选择完整的diff,查看github,或者使用上面链接的Vimhsa这样的解决方案:所有仓库的Git状态