检查 develop 分支是否已合并到 feature 分支?

3

我有一个脚本可以升级版本并创建一个包含升级内容的提交,并打上标签。我遇到的问题是如何确保从远程获取develop分支并将其合并到feature分支,以确保在PR合并期间没有冲突。

我该如何检查feature和develop是否已经合并?


“同步”和“合并”是不同的:如果两个标签指向相同的提交,则它们是同步的,但是如果分支A完全合并到分支B中,则由A标识的提交是B标识的提交的前身。换句话说,B可以比A领先很多,而不是两者同步。 - torek
所寻找的是开发分支头部的提交是否在功能分支头部之前? - Hasen
是的,听起来是这样。请注意,git branch --mergedgit branch --no-merged使用了该测试,但如果您只想检查一个特定的提交对,则有一种更简单的方法:git merge-base --is-ancestor测试特定的提交对。因此,如果A标识的提交是B标识的任何提交的祖先,则git merge-base --is-ancestor A B返回true(以状态0退出)。 (请注意,is-ancestor将相等的提交视为“是祖先”。) - torek
1个回答

8

git branch 命令可显示已合并或未合并的分支。例如,如果您在分支 main 上,并且分支 side 曾在某个时刻合并进来,但另一分支 ahead 尚未合并:

$ git branch --merged
* main
  side
$ git branch --no-merged
  ahead
$ 

如果你想要使用此方法检查,这是可能的(但有些痛苦)。但是,如果你只想测试一个特定的分支对(或者确切地说任何特定的提交对),则“已合并/未合并”的质量就是其中一个提交是否是另一个提交的祖先,在提交图中。

git merge-base 命令有一种模式,它可以为两个特定的提交执行此测试(你可以以 gitrevisions 文档中列出的任何形式指定这两个提交):

$ if git merge-base --is-ancestor side main; then
>     echo side is merged into main
> fi
side is merged into main
$ 
git branch --merged使用的测试方法(对于每个分支,将其与当前分支进行比较)与git merge-base --is-ancestor使用的测试方法相同,即第一个提交(此处为side^{commit})的SHA-1是当前分支尖端提交的祖先。 (提交被认为是自己的祖先,因此您总是可以从git branch --merged得到您自己的当前分支。当然,前提是您首先在分支上 - 如果您处于“分离的HEAD”状态,则所有命名分支的列表都不包括您的分离的HEAD。)

我尝试在一个新分支上运行此命令,未合并也未提交,但答案仍然是“已合并”... - Alex Angelico
2
你刚创建的新分支可能已经被合并了。如果你创建了新分支然后向其中添加一个提交,它就不会再被合并了。(这是因为分支名称在这里并没有真正意义:测试的是提交X是否是提交Y的祖先。分支名称只是一种标识某个特定提交的方式。在给定分支上进行提交的副作用是将分支名称更改为指向刚刚进行的新提交,同时增加提交图。) - torek
你说得对,一旦提交后答案是空的,所以它没有被合并。谢谢! - Alex Angelico

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接