Git 我怎样才能知道master中有多少提交不在我的分支中?
我们正在使用GitHub来存储我们的代码存储库,我们希望所有开发人员在进行本地开发人员测试和合并之前,确保分支与master是最新的 有两种方法可以使用master的提交更新分支:Git 我怎样才能知道master中有多少提交不在我的分支中?,git,github,version-control,merge,rebase,Git,Github,Version Control,Merge,Rebase,我们正在使用GitHub来存储我们的代码存储库,我们希望所有开发人员在进行本地开发人员测试和合并之前,确保分支与master是最新的 有两种方法可以使用master的提交更新分支: 将master合并到我的分支feature\u分支,然后按feature\u分支 将我的分支feature\u分支重设到master上,并强制推送feature\u分支 考虑到相关团队目前正在使用1。(合并工作流),如何查看: 在远程主分支中,但不在远程功能分支中的提交次数 如果1中的数字大于0,则为真值,否则为假
master
合并到我的分支feature\u分支
,然后按feature\u分支
feature\u分支
重设到master上,并强制推送feature\u分支
主分支中,但不在远程功能分支中的提交次数
我知道我可以做一个
git diff master..feature_branch
,但这实际上给了我所有的变化(并且是针对本地分支的)。我只想知道前后提交的数量,与本地master
和远程master
而不是diff
之间显示的方式相同
git diff master..feature
使用log
git log master..feature
请参阅以获得一个很好的解释
所以,如果您只需要计数,那么使用--oneline
并将其传输到单词计数行
git log --oneline master..feature | wc -l
很好,你也应该跟着他。但实际上,您想要的是直接内置在Git中的:
git rev-list --count master..feature
以及:
您可能希望将其组合成非常短的别名或脚本:
echo feature is $(git rev-list --count master..feature) commits ahead of master
echo and $(git rev-list --count feature..master) commits behind master
事实上,这正是git status
和git branch-vv
所做的,尽管它们也先检查前面或后面的零提交
这里有一个简短的(非常简短,对我来说:-)解释
Git的log
和revlist
几乎是同一个命令
git-log
和git-rev-list
都可以查看整个提交范围。最重要的区别是,git log
显示日志消息(以及可选的补丁),而默认情况下,git rev list
只显示原始提交哈希
但是,您可以获取git rev list
来计算它将列出多少次提交,而不是它们的原始散列ID。而且,正如您将在上的漂亮图表中看到的那样,stop..start
双点语法(除了在git diff
中非常特殊的1)告诉git“给我从start
开始可以找到的所有提交,不包括从stop
开始可以找到的所有提交”
如果找到了功能上的所有提交,然后去掉两个分支上的所有提交,那么只剩下功能上的提交。然后你就有了git版本列表
。这些是你“领先”的承诺,这就是你领先的程度
(让git-log
将它们分别记录在一行中,然后让wc
来计算行数,当然也很有效。)
使用feature..master
反转这两个名称,Git将查找master
上的提交,然后删除两个分支上的提交。这些是你“落后”的
git rev list
的输出很少对人类有用,主要用于脚本中。事实上,这正是我在上面建议的:一个两行脚本(或者甚至只有一行,但这在我的屏幕上不太合适)
这里有一个值得思考的问题:我们如何知道如何使用名称master
和feature
?我们怎么能让Git知道这一点?但我们以后再说吧
1这里的问题是,git diff
非常希望最多使用两次提交。带有两个和三个点的范围符号,master..feature
或master..feature
,通常会生成一个很长的提交列表。Git的diff
无论如何都无法处理这些问题。它可以拒绝使用这些符号,这本来是相当合理的,但实际上,Git的作者决定重新使用这些符号来表示相关的东西
这意味着,无论您学习了如何将master..feature
与git diff
一起使用,在处理其他git命令时都必须将其全部忘记。但是这给了我一大堆关于他们的细节。我只想看到1个提前提交,2个在主机后提交
git分支-v可以显示类似1个提前提交
或git分支的信息-vv@John这就是输出,所以使用单线和管道对线计数“强制推进”是在自找麻烦。是的,可以,但也有利弊,一个优点是更干净的历史,但这个问题并不是要讨论重新基础与合并工作流。在我看来,强制推送一个人正在处理的功能分支并不是一个真正的问题。这里有一个小的输入错误echo和$(git rev list--count master..feature)提交到master后面
echo feature is $(git rev-list --count master..feature) commits ahead of master
echo and $(git rev-list --count feature..master) commits behind master