结帐后如何恢复合并提交?

时间:2018-12-20 19:12:11

标签: git merge git-checkout

我从master开始,试图合并来自branch的一系列提交:git merge branch。我解决了该分支机构与主服务器之间的六个冲突。然后我准备提交,但是出于理智起见,我决定将合并提交提交到新分支experimental,因此我运行了git checkout -b experimental,然后提交了已解决的提交。当我这样做时,令我沮丧的是,我发现experimental上的新提交只有一个父级(主),实际上是一个南瓜提交。

是否有一种方法可以重新执行合并而不必重新执行合并冲突?也就是说,我想在其父级分别为masterbranch且其更改解析为experimental的新分支中创建一个提交。有可能吗?

此外,在我最初决定将合并提交到另一个分支的情况下,如何避免失去父母?

2 个答案:

答案 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修复提交消息。