我想将用户分支合并到主分支,但是,在合并提交之前进行一些代码审查和修改。
例如:
o---o---o---o---o master
\
o---o---o lucy
一般情况下,git merge lucy
结果为:
,-- "Merge commit"
|
o---o---o---o---o---o master
\ /
o---o---o----' lucy
经过代码审查和修改后:
,-- "Merge commit"
| ,-- "Code review: 1) fixed EOL char, 2) apply tabsize=4, ..."
| |
o---o---o---o---o---o---o master
\ /
o---o---o----' lucy
与上述情况不同,我想将合并提交和代码审查提交作为单个提交:
,-- "Code review & merge: 1) fixed EOL char, 2) apply tabsize=4, ..."
|
o---o---o---o---o---o master
\ /
o---o---o----' lucy
我已经尝试过git merge --no-commit
,但是,此后我无法将其作为合并提交进行提交。
任何想法?
答案1
尝试以下工作流程。lucy 完成后,不要合并 rebase。。 git checkout lucy; git rebase master
此后,最后的 lucy 提交将与从 lucy 合并到 master 的提交相同。
o---o---o---o---o master
\
o---o---o lucy'
要求您的代码审阅者审阅 lucy。在 lucy 上提交必要的更改(下面的 * 提交),然后执行从 master 上的 lucy 进行的简单合并(例如,可能快进,除非您使用 --no-ff,我推荐这样做)。
o---o---o---o---o---------------o master
\ /
o---o---o---* lucy'
唯一的其他选择是合并到主服务器上,而不是共享/推送主服务器。对主服务器进行代码审查,然后重置 lucy 合并并将代码审查修复重新定位到 lucy 上,然后重新合并。非常容易出错和发生冲突。
后来我读到你的评论,说你无法控制用户的分支。你唯一的选择就是上一段以“非常容易出错和冲突”结尾的段落。
答案2
如果你无法控制你学生的分支,请创建你自己的新分支来进行合并:
o---o---o---o---o---o master
\ \
| * lucy_merge
\
o---o---o----o lucy
进行合并和后续调整:
o---o---o---o---o---o master
\ \
| o---o---* lucy_merge
\ /
o----o----o----o lucy
此后,如果它有其他提交或者需要清理,您可以合并主控:
o---o---o---o---o---o---?---?---* master
\ \ /
| o---o---o lucy_merge
\ /
o----o----o----o lucy
或者,如果主分支中没有变化且不需要清理,则只需移动主分支并删除合并分支:
o---o---o---o---o---o
\ \
| o---* master
\ /
o----o----o----o lucy
答案3
只需进行正常合并,然后git commit --amend
在提交审查提交时使用修改前一次提交。