【问题标题】:How Can I Remove A Merged Feature Branch Using Rebase?如何使用 Rebase 删除合并的功能分支?
【发布时间】:2022-07-08 00:42:25
【问题描述】:

我已经使用git merge --no-ff通过拉取请求创建合并提交合并了许多功能分支进行开发,现在我已经开始测试该版本。

在测试期间,企业决定删除其中一项功能。

例如,在这个图表(不是我的)中,我会尝试从历史记录中删除棕色分支“合并拉取请求 #8661..”。
您可以看到这不是一个简单的线性案例,因为从分支的第一次提交到合并点存在重叠的提交和合并。

使用git revert 并进行新的提交并没有真正起作用,因为它会将功能提交留在历史中,这使得由于git revert 的警告而很难在下一个版本中将它们返回

还原合并提交声明您将永远不希望合并带来的树更改。 因此,以后的合并只会带来提交引入的树更改,这些提交不是先前恢复的合并的祖先。 这可能是也可能不是您想要的。

所以我想要实现的是“撤消”而不是“恢复”。

交互式 rebase 似乎 可能 是要走的路,但我需要能够识别构成该功能分支的所有提交哈希,这在大回购。
我需要确保其他合并提交保持不变并且历史记录没有被展平 (--preserve-merges?)

有什么好的方法来解决这个问题?

注意:我不担心我正在重写历史或哈希正在更改,因为它会很好地传达给团队并且我可以解决冲突。

【问题讨论】:

    标签: git


    【解决方案1】:

    使用git revert 并进行新的提交并没有真正起作用,因为它会将功能提交留在历史中,这使得在下一个版本中恢复它们变得很棘手......

    你可以完全改写你的历史,但警告并不像看起来那么棘手。到目前为止,在您的情况下,最简单的操作是使用以下命令还原合并提交:

    git revert <merge-commit-id> -m 1
    

    稍后当需要重新加入该功能时,您只需还原还原:

    git revert <first-revert-commit-id>
    

    或者,您可以更改原始分支的提交 ID,然后可以通过常规合并将它们带回。有多种方法可以更改提交 ID,例如 cherry-pick 来自原始分支的提交范围,或者 rebase 带有 --no-ff 或 --force-rebase 选项的分支与通常会跳过的 merge-base 提交rebase 无事可做,但在这种情况下只会重写该分支上的提交以获得新的提交 ID。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      • 2013-12-05
      • 2021-03-28
      • 1970-01-01
      相关资源
      最近更新 更多