我怎样才能知道有多少 master 中的提交不在我的分支中?
How can I find out how many commits in master are not in my branch?
我们正在使用 GitHub 来存储我们的代码存储库,我们希望所有开发人员在进行本地开发人员测试和合并之前确保分支与 master 保持同步。
有两种方法可以使用 master 的提交更新分支:
- 合并
master
到我的分支 feature_branch
,然后推送 feature_branch
- 将我的分支
feature_branch
重新设置到 master 上,并强制推送 feature_branch
。
鉴于有问题的团队目前正在使用 1.(合并工作流程),我如何查看:
- 远程
master
分支中的 提交数 ,但不在远程 feature_branch
. 中
- 如果 1 中的数字大于 0,则为真值,否则为假。
最好有与 GitHub 集成的东西来执行此操作,但我也想知道如何从命令行执行此操作。
我知道我可以做 git diff master..feature_branch
,但这实际上给了我所有的更改(并且是针对本地分支机构的)。我只想知道前后提交的数量,其方式与本地 master
和远程 master
之间显示的方式相同
而不是diff
git diff master..feature
使用log
git log master..feature
请参阅 this answer 以获得很好的解释。
因此,如果您只想要计数,请使用 --oneline
并将其通过管道传输到字数统计行。
git log --oneline master..feature | wc -l
is fine, and you should follow his link to this other answer 还有。但你想要的实际上直接内置于 Git:
git rev-list --count master..feature
和:
git rev-list --count 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
事实上,这正是 git status
和 git branch -vv
所做的,尽管它们也会先检查零提交或落后。
这是一个简短的(对我来说非常简短:-))的解释。
Git的log
和rev-list
几乎是同一个命令
git log
和 git rev-list
都查看整个提交范围。最重要的区别是 git log
向您显示 日志消息 (以及可选的补丁),而 git rev-list
默认情况下仅向您显示原始提交哈希。
然而,你可以让 git rev-list
给你一个 count 的 多少 提交它会列出,而不是他们的原始哈希 ID。而且,正如您将在 that other answer 上的漂亮图表中看到的那样,stop..start
双点语法( 除了 git diff
很特别1) 告诉 Git "give me all the commits you can find starting from start
, excluding all the commits you can find starting from stop
".
如果您找到 feature
上的所有提交,然后删除 两个 分支上的所有提交,您只剩下提交在 feature
上仅 。然后你有 git rev-list
count 个。这些是您 "ahead" 的提交,所以这就是您的领先程度。
(让 git log
记录它们,每个记录在一行上,然后让 wc
来计算行数,当然也可以。)
颠倒两个名称,使用 feature..master
,Git 找到 master
上的提交,然后删除两个分支上的提交。这些就是你 "behind".
git rev-list
的输出很少对人类有用,主要用于脚本。事实上,这正是我在上面建议的:两行脚本(或者甚至只有一行,但在我这里的屏幕上不太合适)。
这里有一个思考问题:我们如何知道使用名称 master
和 feature
?我们如何指示 Git 知道这些?但是让我们稍后再说。
1这里的问题是 git diff
迫切希望 最多与 两个 提交。带有两个和三个点的范围符号 master..feature
或 master...feature
,通常会产生一长串提交。 Git 的 diff
无论如何都无法处理这些。它 可以 只是拒绝采用这些符号——这本来是非常合理的,真的——但是相反,Git 作者决定他们将重新使用这些符号来表示某些东西相关。
这意味着无论您在使用 master..feature
和 git diff
时学到了什么,在处理其他 Git 命令时都必须忘记它。 sic transit gloria Git.
我们正在使用 GitHub 来存储我们的代码存储库,我们希望所有开发人员在进行本地开发人员测试和合并之前确保分支与 master 保持同步。
有两种方法可以使用 master 的提交更新分支:
- 合并
master
到我的分支feature_branch
,然后推送feature_branch
- 将我的分支
feature_branch
重新设置到 master 上,并强制推送feature_branch
。
鉴于有问题的团队目前正在使用 1.(合并工作流程),我如何查看:
- 远程
master
分支中的 提交数 ,但不在远程feature_branch
. 中
- 如果 1 中的数字大于 0,则为真值,否则为假。
最好有与 GitHub 集成的东西来执行此操作,但我也想知道如何从命令行执行此操作。
我知道我可以做 git diff master..feature_branch
,但这实际上给了我所有的更改(并且是针对本地分支机构的)。我只想知道前后提交的数量,其方式与本地 master
和远程 master
而不是diff
git diff master..feature
使用log
git log master..feature
请参阅 this answer 以获得很好的解释。
因此,如果您只想要计数,请使用 --oneline
并将其通过管道传输到字数统计行。
git log --oneline master..feature | wc -l
git rev-list --count master..feature
和:
git rev-list --count 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
事实上,这正是 git status
和 git branch -vv
所做的,尽管它们也会先检查零提交或落后。
这是一个简短的(对我来说非常简短:-))的解释。
Git的log
和rev-list
几乎是同一个命令
git log
和 git rev-list
都查看整个提交范围。最重要的区别是 git log
向您显示 日志消息 (以及可选的补丁),而 git rev-list
默认情况下仅向您显示原始提交哈希。
然而,你可以让 git rev-list
给你一个 count 的 多少 提交它会列出,而不是他们的原始哈希 ID。而且,正如您将在 that other answer 上的漂亮图表中看到的那样,stop..start
双点语法( 除了 git diff
很特别1) 告诉 Git "give me all the commits you can find starting from start
, excluding all the commits you can find starting from stop
".
如果您找到 feature
上的所有提交,然后删除 两个 分支上的所有提交,您只剩下提交在 feature
上仅 。然后你有 git rev-list
count 个。这些是您 "ahead" 的提交,所以这就是您的领先程度。
(让 git log
记录它们,每个记录在一行上,然后让 wc
来计算行数,当然也可以。)
颠倒两个名称,使用 feature..master
,Git 找到 master
上的提交,然后删除两个分支上的提交。这些就是你 "behind".
git rev-list
的输出很少对人类有用,主要用于脚本。事实上,这正是我在上面建议的:两行脚本(或者甚至只有一行,但在我这里的屏幕上不太合适)。
这里有一个思考问题:我们如何知道使用名称 master
和 feature
?我们如何指示 Git 知道这些?但是让我们稍后再说。
1这里的问题是 git diff
迫切希望 最多与 两个 提交。带有两个和三个点的范围符号 master..feature
或 master...feature
,通常会产生一长串提交。 Git 的 diff
无论如何都无法处理这些。它 可以 只是拒绝采用这些符号——这本来是非常合理的,真的——但是相反,Git 作者决定他们将重新使用这些符号来表示某些东西相关。
这意味着无论您在使用 master..feature
和 git diff
时学到了什么,在处理其他 Git 命令时都必须忘记它。 sic transit gloria Git.