gpt4 book ai didi

git - 如何在 git merge 中强制一个共同的祖先?

转载 作者:IT王子 更新时间:2023-10-29 01:27:53 28 4
gpt4 key购买 nike

假设我有一个名为 master 的分支和一个名为 upstream_lib 的分支。

分支 master 有一个子目录 lib,它基于分支 upstream_lib 上的代码; upstream_lib 中的更改会定期 merge (使用子树策略)到 master 分支。 master 中的 lib 目录对其自身进行了一些修改,这些修改不在 upstream_lib 中。

但是,假设这两个分支没有共同的历史记录(例如,因为存储库刚刚迁移到 git)或者 merge 基础不正确,因为 upstream_lib 中的 merge 已被压缩,有一些 rebase 或其他什么。

问题是:给定 upstream_lib 的一组新更改,如何强制 merge 将 upstream_lib 的特定修订视为共同祖先?

最佳答案

我从未使用过 subtree 策略,所以这可能是一个次优的解决方案(并且可能行不通 ^^),但您可以在 中应用所有新提交upstream_libmaster 行的临时分支,然后 merge 它。我的想法并不能从根本上解决您的情况,因此您每次想要引入新更改时都必须进行这种“手动 merge ”,但它是这样工作的:

  1. 确定 master 祖先系中的假共同祖先,比如 master~100
  2. 确定 upstream_lib 行中的假共同祖先,比如 upstream_lib~150
  3. 制作 upstream_lib 分支的一次性副本:git branch --no-track new_upstream_lib upstream_lib
  4. 使用带子树选项的递归策略,将 new_upstream_lib rebase 到 master~100 上。 (我不认为你可以只使用子树策略,因为正如你所说, master 中的 lib 目录有自己的变化。)这是一个完全未经测试的命令为此:

    git rebase -s recursive -X subtree=lib --onto master~100 upstream_lib~150 new_upstream_lib

    请注意,new_upstream_lib 现在拥有整个 master 树,即使您只关心 lib 目录。

  5. merge :git checkout master && git merge new_upstream_lib && git branch -d new_upstream_lib

关于git - 如何在 git merge 中强制一个共同的祖先?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4668246/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com