【问题标题】:Squashing Two Merge Commits Into a Single Merge Commit?将两个合并提交压缩为一个合并提交?
【发布时间】:2023-01-12 03:22:35
【问题描述】:

我有以下情况:

* a278b6b (HEAD -> feature1) Change i to j
| * c9550d0 (feature3) Print only odds
|/
| * befb5e9 (feature2) 2*z in baz loop
|/
* aa36658 Print only evens

现在,我想做的是将 feature1feature2feature3 分支合并到一个新分支中,以便这个新提交包含来自 3 个分支的所有信息。通常你可以做一个章鱼合并并得到我正在寻找的东西,但在这种情况下,三个分支之间存在合并冲突需要手动解决。因此,在一次合并一个分支以解决所有合并冲突之后,我剩下:

*   6679d6c (HEAD -> DI) merge feature3
|\
| * c9550d0 (feature3) Print only odds
* |   5b03abb merge feature2
|\ \
| * | befb5e9 (feature2) 2*z in baz loop
| |/
* / a278b6b (feature1) Change i to j
|/
* aa36658 Print only evens

其中 DI 是所有三个 feature 分支将合并到的分支。

问题是现在我在这里有两个合并提交:5b03abb6679d6c。我希望只有一个合并提交(为了清洁和维护),但合并冲突意味着我不能直接进行章鱼合并。有没有办法以某种方式将两个合并提交压缩到同一个提交中,就像您对标准提交所做的那样,或者我应该使用的一些其他合并策略以获得与 3 个父项的单个合并提交?

【问题讨论】:

  • “合并冲突意味着我不能直接进行章鱼合并”错误;合并冲突不会影响合并结果的拓扑结构。
  • 我也不相信章鱼合并是您真正想要的,但那是另一回事了。
  • “一次合并一个分支之后”啊。有问题。
  • @matt octopus merge strat 将拒绝任何需要解决冲突的合并,因此这种情况下的合并冲突意味着 OP 不能直接进行章鱼合并。

标签: git merge


【解决方案1】:

使用原始分支作为父节点,将最终树作为...从稀薄的空气中创建提交。那个树:

git commit-tree -p a278b6b -p c9550d0 -p befb5e9 -m "some merge" 6679d6c^{tree}

这将打印一个提交 ID。在那里设置你想要的分支,比如 main:

git branch -f main the-id-from-previous-command

【讨论】:

    猜你喜欢
    • 2015-01-28
    • 2012-09-13
    • 2017-05-07
    • 2023-02-23
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多