我从master
开始,试图合并来自branch
的一系列提交:git merge branch
。我解决了该分支机构与主服务器之间的六个冲突。然后我准备提交,但是出于理智起见,我决定将合并提交提交到新分支experimental
,因此我运行了git checkout -b experimental
,然后提交了已解决的提交。当我这样做时,令我沮丧的是,我发现experimental
上的新提交只有一个父级(主),实际上是一个南瓜提交。
是否有一种方法可以重新执行合并而不必重新执行合并冲突?也就是说,我想在其父级分别为master
和branch
且其更改解析为experimental
的新分支中创建一个提交。有可能吗?
此外,在我最初决定将合并提交到另一个分支的情况下,如何避免失去父母?
答案 0 :(得分:3)
我知道了。
我首先创建一个具有我要查找的祖先的新合并提交。我使用--strategy ours
来节省解析合并的时间:
git checkout -b remerge master
git merge branch -s ours
然后我检出实验分支并使用reset --soft
:
git checkout experimental
git reset --soft remerge
git commit -a --amend
然后清除:
git branch -D remerge
首先要避免这种情况,我唯一想到的就是我应该在原始分支(主节点)中提交合并,然后创建一个分支,然后重置主节点。
答案 1 :(得分:2)
如果您要在experimental
中进行所有更改,则可以使用git commit-tree进行新的提交:
git cat-file commit experimental
获取树形哈希(即合并提交中要包含的内容)git commit-tree -p master -p branch ${tree_hash} -m 'commit msg'
这将打印新提交的哈希,然后您可以将其合并到主提交中,并使用git commit --amend
修复提交消息。