我需要遍历从分支分支的所有分支X
并将主分支合并到每个分支中
在搜索信息时,我找到了完全相反问题的答案。有一个想法是为了在命令中git branch -v
显示所有分支并查看谁具有相同的哈希值。但事实是这个项目非常大,100500个分支走遍所有分支不是一个选择。
另外,我可以说我为团队工作Fedora Linux 35
,bash
所以如果它们适用于这里,我也会很高兴。没有 UI 是非常可取的,即。您需要一个纯控制台命令的解决方案,当然,如果没有其他方法,可以忽略此规则))
我需要遍历从分支分支的所有分支X
并将主分支合并到每个分支中
在搜索信息时,我找到了完全相反问题的答案。有一个想法是为了在命令中git branch -v
显示所有分支并查看谁具有相同的哈希值。但事实是这个项目非常大,100500个分支走遍所有分支不是一个选择。
另外,我可以说我为团队工作Fedora Linux 35
,bash
所以如果它们适用于这里,我也会很高兴。没有 UI 是非常可取的,即。您需要一个纯控制台命令的解决方案,当然,如果没有其他方法,可以忽略此规则))
我看到这样的问题的解决方案。
git log --oneline master..X
,我们找到来自 X 的所有提交。在输出中,我们需要找到最低的提交,例如,使用 tail:git log --oneline master..X|tail -1
git branch --no-contains master --contains …
,并在此处替换步骤 1 中找到的提交。更新
在评论中,您被问到一个非常重要的理解问题:当您说“从分支 X 分支的分支”时,您是什么意思?
从技术上讲,在 git 中,分支是指向单个提交的指针。
从逻辑上讲,所有直接或间接是分支指向的提交的祖先的提交。
但大多数情况下,分支下的程序员指的是指定分支中的提交列表,但不在主分支中(例如,在主分支中)。
它是执行合并或变基时将处理的最后一组提交。正是这个集合将由命令显示
git log master..X
(主分支,两个点,正在处理的分支)。因此,我认为从 X 分支的分支是从分支 X 中的任何提交分支的任何分支。
如果提交 a 是提交 b 的祖先,则任何包含 b 的分支在逻辑上也包含提交 a。鉴于此,从分支 X 的任何提交分支的任何分支都包含分支 X 的第一个提交。我们在步骤 1 中找到的正是这个提交。接下来,提交 1。
因此,我们使用命令找到从 X 分支的所有分支
git branch --contains коммит1
考虑到你说的,第一,有很多分支,第二,你需要将它们全部合并到master中,我认为这项工作可能需要一天以上的时间。因此,在第二天早上,您可能希望获得的不是整个列表,而是那些尚未处理的分支的列表。
如果 master 尚未合并到分支中,则分支将包含祖先 commit1,但不会包含 master 提交。如果 master 被合并到分支中,那么它将包含 commit1 和 master。
我们需要过滤后者,所以我们指定一个额外的过滤器
--no-contains master
重要的!合并到master的分支和合并到master的分支是不一样的!
更新 2
如果在 master 中进行了一些重要的提交,例如错误修复,通常会出现这种需求。由于 master 可以在多天的工作中跑得更远,master 分支本身(它的新状态)将再次不会被合并。为避免这种情况,在所有描述的命令中,您可以将 master 替换为该重要提交的哈希。