- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
假设我有一个名为 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_lib
到 master
行的临时分支,然后 merge 它。我的想法并不能从根本上解决您的情况,因此您每次想要引入新更改时都必须进行这种“手动 merge ”,但它是这样工作的:
master
祖先系中的假共同祖先,比如 master~100
。upstream_lib
行中的假共同祖先,比如 upstream_lib~150
。upstream_lib
分支的一次性副本:git branch --no-track new_upstream_lib upstream_lib
使用带子树选项的递归策略,将 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
目录。
git checkout master && git merge new_upstream_lib && git branch -d new_upstream_lib
。关于git - 如何在 git merge 中强制一个共同的祖先?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4668246/
我是一名优秀的程序员,十分优秀!