Git 检查开发分支是否已合并到功能分支?

Git 检查开发分支是否已合并到功能分支?,git,Git,我有一个脚本正在修改版本,并用这个版本进行提交和标记。我遇到的问题是确保从远程获取develop,然后将其合并到功能分支中,以确保在PR合并过程中没有冲突 如何检查功能和开发是否同步合并?git branch命令将显示已合并或未合并的分支。例如,如果您在分支main上,分支侧在某个点被合并,但前面的另一个分支尚未合并: $ git branch --merged * main side $ git branch --no-merged ahead $ 用它来检查是可能的(但有点痛苦)

我有一个脚本正在修改版本,并用这个版本进行提交和标记。我遇到的问题是确保从远程获取develop,然后将其合并到功能分支中,以确保在PR合并过程中没有冲突


如何检查功能和开发是否同步合并?

git branch命令将显示已合并或未合并的分支。例如,如果您在分支
main
上,分支
在某个点被合并,但前面的另一个分支
尚未合并

$ git branch --merged
* main
  side
$ git branch --no-merged
  ahead
$ 
用它来检查是可能的(但有点痛苦)。但是,如果您只想测试一对特定的分支(或者任何特定的提交对),那么“是/不是合并”的质量只是根据提交图判断一个分支是否是另一个分支的祖先

git merge base
命令有一种模式,在该模式下,它针对两个特定的提交执行此测试(您可以以中列出的任何形式指定):


git branch--merged
使用的测试(对于每个分支,将其与当前分支进行比较)与test
git merge base--is祖先使用的测试相同,即第一次提交(这里
side^{commit}
)所使用的SHA-1是当前分支的tip提交的祖先。(提交被认为是自身的祖先,因此您总是从git branch--merged(合并)中获得自己的当前分支。当然,如果您处于“分离头”状态,那么首先假设您在一个分支上,则所有命名分支的列表不包括分离头。)

“同步”和“合并到”是不同的:如果两个标签引用相同的提交,则它们是同步的,但是如果A标识的提交是B标识的提交的前身,则分支A完全合并到分支B中。换句话说,B可以远远领先于A,而不是两者是同步的。所以我要寻找的是,开发分支负责人的提交是否在功能分支负责人之前?听起来是这样的,是的。请注意,
git branch--merged
git branch--no merged
使用该测试,但如果您只想检查一个特定的对,则有一个更简单的方法:
git merge base--is consent
测试特定的提交对。因此,
git merge base——如果
A
标识的提交是commit
B
标识的任何提交的祖先,那么祖先A B
返回true(以状态0退出)。(请注意,
是祖先
将相等提交视为“是祖先”)我使用一个新分支尝试了这个命令,没有合并也没有提交,答案仍然是“是合并的”…您刚刚创建的新分支可能已经合并。如果创建新分支,然后向其添加提交,则该分支将不再合并。(这是因为分支名称在这里并不真正意味着什么:测试的是提交X是否是提交Y的祖先。分支名称仅仅是识别某个特定提交的一种方式。在给定分支上进行提交会产生副作用,即在增加提交图的同时,更改分支名称以指向刚刚进行的新提交。)你是对的,一旦提交,答案是空的,因此,它不会被合并。谢谢
$ if git merge-base --is-ancestor side main; then
>     echo side is merged into main
> fi
side is merged into main
$