1.merge和rebase
merge和rebase都是合并分支的git命令
2.冲突
合并的时候会产生冲突
冲突是因为合并时,不同分支修改了同一文件。git不知道你需要保留哪个,所以提出冲突提醒,让你手动选择想要保留的修改。
3.merge和rebase的区别
合并之前的分支状态如下图
图一
3.1.git merge
源分支 :需要合并其他分支代码的当前分支
目标分支:被合并的分支
基线:开始分叉的点
当使用merge命令时,源分支的修改和目标分支的修改合并为一个新的commit (不想产生新的commit,可使用git mere --no-commit 命令)。此commit包含修改了冲突的新的文件提交。
举例说明
一开始分支状态如图一所示,此时在develop(源分支)分支执行git merge master 。此时会将master(目标分支)的修改和develop的修改合并到一起,产生图二中merge branch 'master' into develop这样的新的commit信息。

图二
3.2 git rebase
当使用rebase命令时,会在源分支最后追加合并目标分支的所有commit记录,当有冲突时,需要重复解决多次。在源分支能整体追溯到所有的commit信息
举例说明
一开始分支状态还是如图一所示,此时在master(源分支)分支上执行git rebase develop。会将develop(目标分支)上提交的记录追加到master最后一次提交之后。如图三所示
图三
4.优缺点
merge缺点:每次合并产生新的commit,并且追溯合并的commit信息会有困难。当合并比较频繁时,单分支线上的commit信息会很混乱,查找问题不方便。
merge优点:每次合并都会产生commit,有冲突时,修改一次重新commit即可。
rebase缺点:每次合并本质上是追加新的commit,当冲突发生时,可能需要手动操作很多次重复的冲突。
冲突解决也麻烦
第一步 1. git add
第二步 2.git rebase --continue
第三步 3. 如果执行第二步无效,那么可以执行 git rebase --skip
注意:不要执行完 git add 之后执行 git commit
5.总结
当我们需要保持一条分支的所有commit记录是完整链路的,建议使用git rebase。
本地更新代码时建议使用git rebase (默认git pull 是merge模式,需要git pull origin xxx --rebase才能使用rebase更新)
当主分支合并临时分支代码时,建议git merge。




