重置为子树

  • 本文关键字: git git-subtree
  • 更新时间 :
  • 英文 :


情况是我们有两个存储库,parentchildparentrepo将childrepo作为子树:

parent/
child/

一段时间后,child存储库与它的上游(parent项目使用了补丁,但没有贡献给child的上游)。

child子树中提取补丁(并且只提取特定的补丁)以便它可以上行的正确Git命令是什么?

为了说明,让我们命名以下分支:

  • mainparent仓库的主要分支(包括我们不想上游的补丁,但不包括我们想上游的补丁),
  • feature是我们想要上游的补丁所在的分支;feature基于main
  • child-mainchild上游的主要分支(我们想把我们的补丁发送到那里)

我们要创建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指向(忽略以前的补丁)之后所做的更改

相关内容

  • 没有找到相关文章

最新更新