如何制作复杂的章鱼合并?

时间:2015-03-23 11:51:56

标签: git merge

我只是从master的提示中提出了8个不同的建议,我想做一个将所有这些建议合并在一起的提交。我通过逐个手动解决合并冲突来完成合并(然后将它们与git merge --squash一起压缩),但现在,当我尝试使用git merge -s ours branch1 branch2 branch3 etc进行章鱼合并提交时,它回复Merge with strategy ours failed.如果我提交了压缩的合并而然后一个多父提交,提交工作,但我有一个提交做某事,然后是空提交,我不想要那个。如何将合并内容提交与合并父提交相结合?

2 个答案:

答案 0 :(得分:7)

听起来你有一棵具有正确内容的树,现在你想要创建一个包含该内容和正确父母的提交。我不完全确定你是如何使用git porcelains进行你想要的提交的,但是当你可以使用管道时,你可以直接使用它,如果你喜欢的话

如果您已正确合并所有文件并在索引中,则可以使用git write-tree找到树的哈希值:

$ git write-tree
4d5fcadc293a348e88f777dc0920f11e7d71441c

然后,您可以使用正确的父母创建提交:

$ git commit-tree 4d5fcadc293a348e88f777dc0920f11e7d71441c -p branch1 -p branch2 ... -m "Dummy Message"
85e2a8f2f71816d17887caaf39e46225e47165a9

并更新您的分支以指向新提交

$ git reset --hard 85e2a8f2f71816d17887caaf39e46225e47165a9

我通常使用虚拟消息创建提交,然后返回并使用git commit --amend稍后填写。

答案 1 :(得分:2)

如果你不想直接使用管道系统(谁能责怪你?)那么你可以将你的问题重新解决。

这里的诀窍在于,您有一个提交,其中包含您的实际更改,单个父级,另一个没有更改但只有多个父级。如果你将变化压缩在一起,那么第一个提交的父母仍然存在。

目前,你的提交是以错误的顺序进行压制:第二次提交,与其父母一起,将会丢失。但由于该提交没有任何变化,因此应该可以对它们进行重新排序,以便壁球能够正常工作。

如果您在开始之前在最后一次提交时使用master和origin / master点,那么执行git rebase -i origin/master,它应该在编辑器中提供两次提交:

pick 12345 All changes here
pick 67890 Octopus merge

向上移动第二行,然后压缩更改:

pick 67890 Octopus merge
squash 12345 All changes here

保存并退出,我希望有效:)。