【问题标题】:How do I squash commits on a branch that has children如何在有孩子的分支上压缩提交
【发布时间】:2015-03-08 02:51:54
【问题描述】:

所以我有一个主人和一个继续它的错误修复分支的情况。我尝试在 master 上压缩一些提交,然后在其上重新定位错误修复,但我遇到了合并冲突。正确的方法是什么?我在本地工作,没有遥控器。

看起来像这样:

A - B - C - D - E - F [master]
                     \                 
                      G - H - I - J - K [bugfix]

我想压缩 A - B - C - D - E - F 并且仍然有错误修复继续压缩的主分支。

【问题讨论】:

  • 要获得有用的答案,您应该告诉我们更多信息。告诉我们你的仓库历史的哪一部分(如果有的话)被推送到一个共享的远程,或者添加一个描述你最近历史的 ASCII 提交图(例如,参见this)。

标签: git rebase squash


【解决方案1】:

Jubob 关于共享历史的观点非常重要,因为强烈建议不要对共享提交进行变基或压缩。

我假设您正在处理本地提交。

假设你是这样开始的:

[master] A---B---C---D
                      \
[bugfix]               1---2---3

而你决定将BCD 压缩成一个新的提交D'

[master] A---D'
          \
[bugfix]   B---C---D---1---2---3

请注意,提交 BCD 仍保留在 bugfix 分支中。如果你只是简单地将bugfix 变基为master,Git 会尝试这样做:

[master] A---D'
              \
[bugfix]       B---C---D---1---2---3

BCD 引入的更改已经包含在D' 中。你真正想要的结果是这样的:

[master] A---D'
              \
[bugfix]       1---2---3

您可以使用rebase--onto 选项来完成此操作:

git rebase --onto master D bugfix

D 应该是bugfix 中的最新提交,在变基时应该包括在内。

【讨论】:

    猜你喜欢
    • 2014-10-10
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 2021-11-14
    • 2023-01-11
    • 2016-03-08
    相关资源
    最近更新 更多