2011-09-26 94 views
2

我已经创建了一个存储库,只需在某个点检出上游版本即可创建存储库。我知道它来自的确切提交。从另一个分支迁移提交,没有公共父项

现在有没有简单的方法来合并剩余的提交?我怎么能做到“在xyz之后合并所有东西”,而不必在提交之前忽略缺少的公共历史记录?

+0

你可以做git rebase来做到这一点 –

+0

@KitHo你可以发布实际的命令吗? – viraptor

回答

2

git format-patch ancestor..HEAD on the source repo,and git am on the target repo would be work。

+0

出于某种原因,我在此之后发生冲突。浏览回购发现问题... – viraptor

+0

我做了'format-patch hash_I_have..last_has',但随后路径上出现合并,git尝试将修改两次应用于同一个文件。 – viraptor

+0

你的意思是说这两个回购券之间已经合并了?或者其他一些合并本地到源回购?或者是其他东西? – Useless

1

针对这个问题的一个很好的解决方案是使用git的“移植”机制,该机制专门用于拼接不同的历史。这里也有一些解释在这里:

...和一个不错的教程在这里:

由于这些链接提示,你可能会想使用git filter-branch添加嫁接后重写您的历史记录,使其他人可以克隆完整的历史记录,包括嫁接的所有内容。(虽然这应该有关于重写历史记录的常见警告)。

1

这里的一个选择是将您的工作重新分配到您分支的存储库的当前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来使用它们的版本。

+0

尽管如此,使用rebase将线性化所有正在重新应用的历史记录。您可以使用'--preserve-merges'参数来重新设置以试图解决这个问题,但我不确定在实践中效果如何。 –

相关问题