繁体   English   中英

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

[英]Reliable way of finding 'parent' branch from a checked-out Git branch

我们的工作流中有 3 种类型的分支 - master、release 分支和 hotfix 分支。 Release 分支由 master 组成,hotfix 分支由 release 分支组成。

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

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

我查看了很多问题,包括如何找到 Git 分支的最近父级? 并且在不知道从哪个分支中选择的情况下找到一个 git 分支的原始父分支,并尝试了各种 git 命令。 我得到的最接近的是创建一个输出 refs 的自定义日志,仅包括来自refs/remotes远程分支,并排除已知的修补程序分支。 这将返回我所追求的原始发布分支,但也返回另一个不相关的分支。

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

返回:

 (origin/release_0.1.4, origin/Some_other_branch)

我不是 100% 确定origin/Some_other_branch来自哪里。 我认为这个提交在某个时候是在另一个分支上。 也许提交是精心挑选的?

在剩下的两个分支中,有没有办法进一步细化结果? 我想知道git log reflog-walkgit log reflog-grep

在这种情况下,我认为不可能使用 Git 可靠地判断哪个分支是“父”分支。

(我确实使用我们的代码管理工具 Phabricator 找到了这个问题的解决方案。正如在这个文件中所暗示的,Arcanist 记录了你在 refs 数组的“onto”键下推送的分支的远程跟踪分支。通过设置上游分支正确,我能够查询 Phabricator API,并检索分支名称和“onto”分支。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM