Git 仅重设基础/重播合并提交

Git 仅重设基础/重播合并提交,git,git-merge,git-rebase,Git,Git Merge,Git Rebase,是否有任何方法可以自动重新设置大量合并提交的基础?另一个问题的答案是,建议使用——preserve merges,但这也将重新确定非合并提交的基础 当将功能分支合并到主分支或集成分支中,然后发现其他人刚刚推动了更改时,不需要这种行为。此外,能够在新的主提交上重新设置开发分支的基础,或者从开发中删除不打算使用的修复程序是很有用的 例如,考虑到以下情况: * 7909b1a (origin/master) Merge bug/456 |\ | * f9d43b6 (origin/bug/456) 4

是否有任何方法可以自动重新设置大量合并提交的基础?另一个问题的答案是,建议使用
——preserve merges
,但这也将重新确定非合并提交的基础

当将功能分支合并到主分支或集成分支中,然后发现其他人刚刚推动了更改时,不需要这种行为。此外,能够在新的主提交上重新设置开发分支的基础,或者从开发中删除不打算使用的修复程序是很有用的

例如,考虑到以下情况:

* 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)
这是不可取的,因为commit 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
到origin/master,然后重新合并我已经做过的分支(使用该选项,这样我就不必重新解决冲突),但是当有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...

是的,您可以通过使用正确的父级重新执行未推式合并来获得此结果

git checkout -B master origin/master
git merge bug/123

并以与32666合并相同的方式处理任何冲突。由于重新基础不会产生任何数量的冲突,因此合并也不会产生任何数量的冲突。

我已经提到了这种可能性,“我可以手动重置——很难进行原始/主设置,然后重新合并我已经执行的分支(使用--rere autoupdate选项,这样我就不必重新解决冲突了),但当有15个合并而不是1个合并时,这可能会变得非常复杂。”请绘制一个准确的提交图,反映您想要的内容。您现在所拥有的理想结果,即您绘制的提交图,正是您所说的您不想要的合并,而希望不必重新解决您在现有合并中已解决的冲突,这只是表示您想要重用记录的结果的另一种方式。该图是准确的。我只想要一个对大量合并实用的解决方案。引用最初的问题,“当有15个合并而不是1个合并时,情况会变得相当复杂”。如果git内置的自动合并不能自动为您完成,我想最好的办法是,任何自动完成的东西都会经常产生不好的合并。我不认为当你想做15个独立的合并时有任何捷径。也许,如果你提供一些具体的例子,说明你怀疑的复杂情况可能不是固有的,这些复杂情况也许可以通过一些额外的工作来避免,这会有所帮助。我认为你是误解了。rerere过程工作得很好。我想在我合并的其他人没有合并的所有分支上自动调用
git merge