【问题标题】:Rebase into a subtree变基为子树
【发布时间】:2022-07-01 15:45:52
【问题描述】:

情况是我们有两个存储库,parent 和 child。 parent 存储库将 child 存储库作为子树:

parent/
  child/

一段时间后,child 存储库与其上游分道扬镳(已为使用 parent 项目制作了补丁,这些补丁尚未贡献给 child 的上游)。

从child 子树中提取补丁(并且仅是特定补丁)以便将其上传到上游的正确 Git 命令是什么?

【问题讨论】:

    标签: git git-subtree


    【解决方案1】:

    为了澄清,让我们命名以下分支:

    • main 是 parent 存储库的主要分支(包括我们不想上游的补丁,但不包括我们想要上游的补丁),
    • feature 是我们要上游的补丁所在的分支; feature 基于 main
    • child-main 是 child 上游的主要分支(我们要将补丁发送到的地方)

    我们要创建child-feature 分支,它包含严格在feature 分支中的所有修改,没有来自main 的任何内容。

    我们可以这样做:

    git switch -b child-feature feature
    git rebase -i -s subtree --onto child-main main
    

    解释:

    • git switch feature:切换到feature 分支
      • -b child-feature:在feature 分支之上创建child-feature 分支
    • git rebase:通过复制当前分支包含的所有提交来移动当前分支
      • -i:交互式,不是必需的,但便于理解正在发生的事情
      • -s subtree:使用subtree 策略,它知道如何处理子树(对父存储库的所有更改都被删除,所有更改都被“移动”,因此项目根目录是子树目录)
      • --onto child-main:将结果放在child-main 分支的顶部
      • main:仅考虑在提交 main 指向(忽略以前的补丁)之后所做的更改

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      • 2011-06-10
      • 2012-05-20
      • 2021-07-31
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      相关资源
      最近更新 更多