Ste*_*eve 3 git version-control merge github rebase
我们正在使用GitHub来存储代码存储库,并且我们希望所有开发人员在进行本地开发人员测试和合并之前,确保分支与master保持最新。
有两种使用master提交更新分支的方法:
master到我的分支feature_branch,然后推送feature_branchfeature_branch到master上,然后强制push feature_branch。鉴于相关团队当前正在使用1.(合并工作流程),我如何看到:
master分支,而不是远程的feature_branch。具有与GitHub集成的功能是最可取的,但是我也想知道如何从命令行执行此操作。
我知道我可以做一个git diff master..feature_branch,但是实际上给了我所有的更改(并且是针对本地分支的)。我只想知道前面和后面的提交数量,与本地master和远程之间显示的方式相同master
Jeff Puckett II的答案很好,您也应该遵循他的链接到该其他答案。但是实际上您想要的是直接内置到Git中的:
git rev-list --count master..feature
Run Code Online (Sandbox Code Playgroud)
和:
git rev-list --count feature..master
Run Code Online (Sandbox Code Playgroud)
您可能希望将其组合成非常简短的别名或脚本:
echo feature is $(git rev-list --count master..feature) commits ahead of master
echo and $(git rev-list --count feature..master) commits behind master
Run Code Online (Sandbox Code Playgroud)
这是,事实上,正是git status和git branch -vv做的,虽然他们检查零提交超前,或隐藏第一了。
这是一个简短的解释(对我来说是非常简短的:-))。
log和rev-list几乎相同的命令两者git log并git rev-list查看整个提交范围。最重要的区别是,默认情况下,它git log向您显示日志消息(以及可选的补丁程序),而git rev-list仅显示原始提交哈希值。
你可以,但是,让git rev-list给你一个数的多少,将提交过上市,而不是他们的原始哈希标识。而且,正如您将在另一个答案的漂亮图表中看到的那样,stop..start两点语法(除了git diff其中非常特殊的1)告诉Git“将您可以从中找到的所有提交都给我start,不包括您可以找到的所有提交。来自stop“。
如果你发现所有的都在提交feature,然后拿走所有的都在提交两个分支,留给你的只有那些在提交唯一的feature。然后,您git rev-list 数了他们。这些是您“超前”的提交,所以这就是您要走的路。
(将git log它们记录在一行上,然后wc对行进行计数,当然也可以。)
反转两个名称,使用feature..master,使Git在上找到提交master,然后在两个分支上删除提交。这些是您“落后”的人。
的输出git rev-list很少对人类有用,主要用于脚本中。实际上,这就是我上面所建议的:两行脚本(甚至只是一行,但是在这里我的屏幕不太适合)。
这是一个值得思考的问题:我们怎么知道使用名称master和feature?我们如何指示Git知道这一点?但是,让我们将其留待以后使用。
1这里的问题是,git diff 迫切希望最多处理两次提交。带两个和三个点master..feature或的范围符号master...feature通常会产生一长串提交。Git diff仍然无法处理这些。它可能只是拒绝采用这些表示法,这本来是很合理的,但实际上,Git作者决定,他们将重用这些表示法来表示相关的内容。
这意味着,无论您学会了如何使用master..featurewith git diff,都必须在处理其他Git命令时将其全部忘掉。 Sic运输gloria Git。