2017-02-23 193 views
1

我试图修复我的git分支,这是我所做的。Git合并主无需恢复提交

我有一些代码应该在分支中开发;然而,我承诺并推动主人(承诺A)。

然后,我继续并恢复了该提交,并将恢复推回给主(提交B恢复A)。

然后,我创建了一个关于提交A的分支并继续我的开发(提交C和D)。所以这就是我目前的树看起来像:

* D (HEAD -> branch_a, origin/branch_a) removed testing code 
* C updated 
| * B (origin/master, origin/HEAD, master) Revert "new code" 
|/ 
* A new code 

我希望能够干净地合并此分支回到主。通常,我会做的是git pull origin master到我的分支,但我不能这样做,在这种情况下,因为master具有A的复归

我能在branch_a做,以确保它能够合并到master没有失去我的工作?

+0

是不是正确的,你只是想了解'B'忘记,并希望你的历史看起来像'A - >ç - > d '? – mkrieger1

+0

@ mkrieger1一旦我合并回主人,是的,我基本上想忘记'B'。最初的问题是'A'从来就不应该成为主人,唯一的原因'B'是必要的,所以'A'在我准备好之前并不在主人身上。 – FGreg

回答

0

输入问题后,我发现一个similar question碰巧有一个命令,它实现了我正在寻找的结果。

由于只向承诺master提交B,这是在分支上不需要的提交,因此可以使用在发生冲突时保留分支中的更改的策略合并masterbranch_a

branch_a运行git merge -s ours master将使用在发生冲突时branch_a版本合并masterbranch_a

这种操作的结果改变了树的样子:

E (HEAD -> branch_a, origin/branch_a) Merge branch 'master' into branch_a 
|\ 
| * B (origin/master, origin/HEAD, master) Revert "new code" 
* | D removed testing code 
* | C updated 
|/ 
* A new code