多人协同工作应该用 merge,一个人写代码可以用 rebase。
merge会产生分支,然而从版本管理的角度,多人的工作本来就应该位于不同的分支。单纯为了线条好看而扭曲了实际开发过程中的事实,并不是可取的行为。
如果需要merge,本来就是因为在你提交之前有别人修改了代码,那么别人的代码事实上确实就是与你并行修改。从流程上讲,别人的代码与你并行修改,并且同时都基于某个早先的基线版本,那么这样的两组修改就确实应该位于不同的分支。分支归并正确的显示了多人协同开发过程中实际发生的客观事实。
因此显然应该选择merge,版本管理软件的职责就是准确的记录开发历史上发生过的所有事情,merge能确保你基于修改的基点忠实的反应了情况,这种情况下merge肯定是更准确的。
但如果是你自己一个人写的代码,多余出来的分支确实是不必要的,本来就应该把线整理成线性。那么确实可以考虑使用rebase。——这种情况下一般发生于自己一个人使用了多台电脑,多台电脑各有不同的未提交代码的情形,建议考虑rebase。
结论重复一下:归并目标是他人代码,用来解决两个不同开发者开发的代码冲突的时候,用merge,归并目标是自己代码,用来解决自己在两台不同电脑上修改代码的冲突的时候,用rebase。