有没有办法自动修改大量数量的合并提交?另一个问题的答案Rebasing a Git merge commit建议使用--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)
这是不可取的,因为提交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,然后重新合并我已经做过的分支(使用--rerere-autoupdate选项,这样我就不必重新解决冲突了),但是当有15个合并而不是1时,会变得相当复杂。
是否有内置的Git解决方案,或者可以完成我想要的脚本?
BTW,执行git rebase -ip master
,然后不选择非合并提交不起作用。我得到了
error: Commit 00... is a merge but no -m option was given.
fatal: cherry-pick failed
Could not pick 00...
答案 0 :(得分:-1)
是的,你可以通过用正确的父母重做未推送的合并来获得这个结果。
git checkout -B master origin/master
git merge bug/123
以与32666合并相同的方式处理任何冲突。由于rebase没有产生任何显着数量的冲突,因此合并也不会。