我有一个脚本可以升级版本并创建一个包含升级内容的提交,并打上标签。我遇到的问题是如何确保从远程获取develop分支并将其合并到feature分支,以确保在PR合并期间没有冲突。
我该如何检查feature和develop是否已经合并?
我有一个脚本可以升级版本并创建一个包含升级内容的提交,并打上标签。我遇到的问题是如何确保从远程获取develop分支并将其合并到feature分支,以确保在PR合并期间没有冲突。
我该如何检查feature和develop是否已经合并?
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。)
git branch --merged
和git branch --no-merged
使用了该测试,但如果您只想检查一个特定的提交对,则有一种更简单的方法:git merge-base --is-ancestor
测试特定的提交对。因此,如果A
标识的提交是B
标识的任何提交的祖先,则git merge-base --is-ancestor A B
返回true(以状态0退出)。 (请注意,is-ancestor
将相等的提交视为“是祖先”。) - torek