我已经创建了一个存储库,只需在某个点检出上游版本即可创建存储库。我知道它来自的确切提交。从另一个分支迁移提交,没有公共父项
现在有没有简单的方法来合并剩余的提交?我怎么能做到“在xyz之后合并所有东西”,而不必在提交之前忽略缺少的公共历史记录?
我已经创建了一个存储库,只需在某个点检出上游版本即可创建存储库。我知道它来自的确切提交。从另一个分支迁移提交,没有公共父项
现在有没有简单的方法来合并剩余的提交?我怎么能做到“在xyz之后合并所有东西”,而不必在提交之前忽略缺少的公共历史记录?
针对这个问题的一个很好的解决方案是使用git的“移植”机制,该机制专门用于拼接不同的历史。这里也有一些解释在这里:
...和一个不错的教程在这里:
由于这些链接提示,你可能会想使用git filter-branch
添加嫁接后重写您的历史记录,使其他人可以克隆完整的历史记录,包括嫁接的所有内容。(虽然这应该有关于重写历史记录的常见警告)。
这里的一个选择是将您的工作重新分配到您分支的存储库的当前HEAD之上。
git rebase
什么是git rebase
会让你的分支回到共同的祖先,然后快速转发你重新分配的分支上的所有新提交,并最后尝试依次应用你的每个提交,直到你有一个提交线性历史记录包括其他分支的所有内容,然后是您自己的所有工作。
警告:绝对不要重新组织分支,您已将您的状态与其他人或其他分支共享,并且您关心保持该关系:这基本上会重写历史记录,并创建与现有关系无关的全新提交。有关重新贴牌的更多信息,请参阅here:我建议您在继续之前阅读该页面。
了这番解释一点,你会做到以下几点:
git remote add source git://host.that.has.source/repo
git fetch source
git rebase source/master
我在这里做了一些假设。
,你必须访问原始资料库:你需要,因为你做你原来的分支这个工作要导入的所有提交。
您想与该存储库的主分支保持同步:如果要使用不同的分支,请将您想要分配的远程分支的名称替换为“主”字(git branch -r
以查看商场)。
注意:当您运行rebase命令时,您可能会遇到需要解决冲突的情况:以正常方式执行此操作。
如果您在之前的樱桃挑选或合并且正在导致冲突的评论中提到的提交,应该可以安全地假设代码的上游副本胜过您的版本:当git尝试应用提交并遇到错误,则可以使用git reset --hard HEAD
,然后使用git rebase --continue
来使用它们的版本。
尽管如此,使用rebase将线性化所有正在重新应用的历史记录。您可以使用'--preserve-merges'参数来重新设置以试图解决这个问题,但我不确定在实践中效果如何。 –
你可以做git rebase来做到这一点 –
@KitHo你可以发布实际的命令吗? – viraptor