迁移来自另一个分支的提交,没有共同的父级

时间:2011-09-26 15:59:24

标签: git merge

我有一个存储库,只需在某个时候检查上游版本即可创建。我知道它来自的确切提交。

现在有一种简单的方法来合并剩余的提交吗?如何在xyz之后“合并所有内容”,忽略在提交之前丢失的常见历史记录?

3 个答案:

答案 0 :(得分:2)

源代表处的

git format-patch ancestor..HEAD和目标仓库上的git am可能会有效。

答案 1 :(得分:1)

正是这个问题的一个很好的解决方案是使用git的“移植”机制,该机制旨在将不同的历史拼接在一起。这里有一些解释:

...这里有一个很好的教程:

正如这些链接所示,您可能希望在添加移植物后使用git filter-branch来重写您的历史记录,让其他人克隆完整的历史记录,包括嫁接的所有内容。(尽管这应该有通常的警告关于重写历史。)

答案 2 :(得分:1)

这里的一个选择是在您分支的存储库的当前HEAD之上重新设置您的工作。

有什么git rebase将你的分支卷回到共同的祖先,然后快速转发你正在反对的分支上的所有新提交,最后,尝试依次应用你的每个提交,直到你有一个线性历史,包括来自另一个分支的所有东西,然后是你自己的所有工作。

警告:永远不要在你与其他人或其他分支共享你的状态的地方重新分支你关心维持这种关系:这基本上会重写历史记录并创建全新的提交,与你现有的提交没有任何关系。有关变基的更多信息可以在here找到:我建议您在继续之前阅读该页面。

记住这个警告你会做以下事情:

git remote add source git://host.that.has.source/repo 
git fetch source
git rebase source/master

我在这里做了一些假设。

  • 您可以访问原始存储库:您需要导入所有提交,因为您创建了原始分支,以便工作。

  • 您希望与该存储库的主分支保持同步:如果要使用其他分支,请将“master”替换为您要重新绑定的远程分支的名称({{ 1}}全部看到它们。

注意:运行rebase命令时,您可能会遇到必须解决冲突的情况:以正常方式执行此操作。

如果您在评论中提到过以前挑选或合并并导致冲突的提交,那么应该可以安全地假设该代码的上游副本胜过您的版本:当git尝试应用该版本时提交和遇到错误,您可以git branch -r然后git reset --hard HEAD使用他们的版本。