有没有什么办法可以自动重定位大合并提交的数量?另一个问题Rebasing a Git merge commit的答案建议使用--preserve-merges
,但这也会使非合并提交变得更加复杂。Rebase/Replay仅合并提交
当将功能分支合并到主或集成分支中,然后发现别人刚推送更改时,不需要此行为。此外,能够将开发分支重新绑定到新的主提交上,或者从开发中删除不打算使用的修补程序是很有用的。
例如,假设以下情况:
* 7909b1a (origin/master) Merge bug/456
|\
| * f9d43b6 (origin/bug/456) 456 - Change color
|/
| * 32666f3 (HEAD, master) Merge branch 'bug/123'
| |\
|//
| * 0939652 (origin/bug/123, bug/123) 123 - Fix Spelling
|/
o 96c9aa9 (tag: v1.1.1)
如果我运行git rebase --preserve-merges origin/master
时,将导致以下情况:
* (HEAD, master) Merge branch 'bug/123'
|\
| * 8e6ccbe 123 - Fix Spelling
|/
* 7909b1a (origin/master) Merge bug/456
|\
| * f9d43b6 (origin/bug/456) 456 - Change color
|/
| * 32666f3 (ORIG_HEAD) Merge branch 'bug/123'
| |\
|//
| * 0939652 (origin/bug/123, bug/123) 123 - Fix Spelling
|/
o 96c9aa9 (tag: v1.1.1)
这是不可取的,因为犯0939652正在重做,但它已经被推到公共仓库,所以它不应该被重播。我想要的结果如下:
* 710c5d7 (HEAD, master) Merge branch 'bug/123'
|\
| * 0939652 (origin/bug/123, bug/123) 123 - Fix Spelling
* | 7909b1a (origin/master) Merge bug/456
|\ \
| |/
|/|
| * f9d43b6 (origin/bug/456) 456 - Change color
|/
o 96c9aa9 (tag: v1.1.1)
我可以手动reset --hard
原产/主,然后重新合并,我已经做了(使用--rerere-autoupdate选项,树枝,这样我就不必reresolve冲突),但是如果有15个合并而不是1,可能会变得非常复杂。
是否有任何内置的Git解决方案或脚本可以实现我想要的功能?
顺便说一句,做git rebase -ip master
,然后不挑选非合并提交不起作用。我得到
error: Commit 00... is a merge but no -m option was given.
fatal: cherry-pick failed
Could not pick 00...
我已经提到过这种可能性,“我可以手动重置 - 难以产生/主,然后重新合并那些我已经做过的分支(使用--rerere-autoupdate选项,这样我就不必重新解决冲突),但是当有15个合并而不是1个时,这会变得相当复杂。“ –
请绘制一张准确的提交图表反映你想要的。你现在所期望的结果是你所画的提交图,就是你说你不想要的合并,并且不希望重新解决已经在现有合并中解决的冲突,这只是说你想要的另一种方式重新**使用**重新**有线**重新**结果。 – jthill
该图准确。我只想要一个适用于大量合并的解决方案。引用最初的问题,“当有15个合并而不是1个时,这可能会变得非常复杂”。我会尽量让这个更清楚。 –