从已检出的Git分支中找到“父”分支的可靠方法

时间:2019-09-02 11:43:36

标签: git merge version-control

我们的工作流程中有3种类型的分支-主分支,发行分支和修补程序分支。发布分支是由master组成的,而修补程序分支是由release分支组成的。

我想知道我的修补程序分支来自哪个发行版分支,即用户在运行时是哪个分支。 python(答案为git co -b release_0.1.4_hotfix)。如果我可以计算出原始分支,则可以在分支之间进行git diff比较,然后将修补程序放到正确的发行分支上。我们的CI系统知道此修补程序分支名称,并将其作为bash脚本的环境变量提供。

麻烦的是git repo还有其他标记和分支提交的东西,所以我需要过滤掉不相关的分支。

我查看了很多问题,包括How to find the nearest parent of a Git branch?Finding the original parent branch of a git branch without knowing which ones to choose from,并尝试了各种git命令。我最近得到的是创建一个输出引用的自定义日志,其中仅包括来自release_0.1.4的远程分支,并且不包括已知的修补程序分支。这将返回我所追求的原始发行分支,而且还返回另一个不相关的分支。

refs/remotes

返回:

git log --format=%d --decorate --decorate-refs="refs/remotes" --decorate-refs-exclude="refs/remotes/origin/release_0.1.4_hotfix"

我不确定100% (origin/release_0.1.4, origin/Some_other_branch) 的来源。我认为此提交有时在另一个分支上。也许提交是精心挑选的?

在剩下的两个分支中,是否有办法进一步完善结果?我想知道origin/Some_other_branchgit log reflog-walk

1 个答案:

答案 0 :(得分:1)

在这种情况下,我认为无法使用Git可靠地确定哪个分支是“父”分支。

(我确实使用我们的代码管理工具Phabricator找到了解决此问题的方法。正如在file中所暗示的那样,Arcanist在您要推送的分支的“ onto”键下记录了该分支的远程跟踪分支。 refs array。通过正确设置上游分支,我可以查询Phabricator API,并检索分支名称和“ onto”分支。)