作为我的ci流程的一部分,它由git标签触发,我需要使用该标签名称自动更新代码中的某些内容,然后将结果提交回git。
问题是,在成功完成合并请求之后,通常会删除分支,因此该提交的标记现在已完全分离并且不包含在任何分支中,因此“提交回git”并不是那么简单,因为我没有要提交的分支。
默认情况下,我可以提交给master,这通常可以工作,但是在某些极端情况下,我无法预测其行为。
一种更合理的解决方案是(如果可能)找出标记的提交被合并到哪个分支,以便我将其提交回该分支。
有可能吗?
(此外,如果您发现此方法有任何问题和/或有更好的建议,请分享您的想法)
答案 0 :(得分:0)
您可以获得可以访问该标签的分支机构列表
git for-each-ref --contains my_tag refs/heads
(您可以使用git branch
代替git for-each-ref
,但是for-each-ref
通常更适合在脚本中使用。您可能需要添加--format
选项才能获得输出看起来像您想要的方式。)
这可能返回多个分支,您必须决定如何协调。一种策略是查看分支中的一个是否可以与另一个分支连接。例如,如果您有
x -- x -- A <-[my_tag]
\
... M -- x <--(b1)
\
... M <--(b2)
我们有b1
可以到达b2
,并且两者都可以到达加标签的提交。如果“我认为发出了什么合并命令”很重要,您可能会更直观地说A
已合并到b1
中。或者,如果在最近的开发中进行提交更有效,那么在这种情况下,您可能会选择b2
。无论哪种方式,您都可能遇到类似
x -- x -- A <-[my_tag]
\
\ x <--(b1)
\ /
... M -- x
\
x <--(b2)
完全可以断言A
是“合并到b1
”还是“合并到b2
”(相对于“合并到不再存在的其他分支”)。因此,此时,您可能只需要选择一个即可。
因此,一般来讲,您无法唯一地标识已标记提交合并到的一个分支。它可能已合并到已删除的分支中,或者甚至可能已以分离的HEAD状态合并。
由于您了解团队的分支/合并策略和其他实践,您也许可以消除其中的某些可能性,但是值得注意的是git本身对诸如“提交合并到的分支”-它只关心“当前状态下可以到达此提交的分支”之类的事情;因此您必须施加一些假设,使其更加具体。