【发布时间】:2012-10-03 05:13:43
【问题描述】:
我正在尝试学习在 Git 1.7.11 中添加的新 git-subtree 命令。添加子树后,我似乎失去了变基的能力。我有一个带有 README 文件的主存储库和一个也有一个 README 文件的库存储库。我用subtree add将它添加到lib目录:
$ git subtree add -P lib/mylib myliborigin master
这工作正常,但现在历史看起来像这样:
* 22c1fe6 (HEAD, master) Merge commit 'b6e698d9f4985825efa06dfdd7bba8d2930cd40e' as 'lib/mylib' -
|\
| * b6e698d Squashed 'lib/mylib/' content from commit d7dbd3d
* b99d55b Add readme
* 020e372 Initial
现在,当我想针对 origin/master 重新设置我的 repo 时,它失败了,因为 squash 提交直接应用于其不适用的父提交,因为它应用于 repo 的根目录而不是我给的前缀添加子树时将其添加到它。
如果我查看 squash 提交,原因就很清楚了。没有关于前缀的信息。它只是压缩在一起的原始 mylib 提交。只有下一次合并提交对此一无所知,但 rebase 不会在这里考虑。
是否有任何解决方法(除了从不基于子树提交变基)?
【问题讨论】:
-
你试过
git rebase --preserve-merges吗? -
@TechliveZheng 效果很好,谢谢! Read more here
标签: git git-rebase git-subtree