git开发中,通常会存在合并分支的现象,Merge与Rebase是两种合并分支的策略,那么这两个策略的区别是什么?什么时候用什么比较好?

合并分支策略

1. Merge

Git 会把两个分支的修改合并到一起。如果同时在两个分支上修改了同一个文件的同一行,就会产生冲突,需要手动解决。你可以通过以下命令来设置这个策略:

1
git config pull.rebase false

2. Rebase

Git 会把你在本地分支上的修改暂时保存起来,然后把本地分支更新为远程分支的最新状态,最后再把保存起来的修改应用回去。这样可以保持提交历史的线性,但是如果两个分支有相同的修改,可能需要解决更多的冲突。你可以通过以下命令来设置这个策略:

1
git config pull.rebase true
  1. Fast-forward only

只有当本地分支可以直接快进到远程分支的状态时,Git 才会进行更新,否则就会报错。这个策略可以通过以下命令来设置:

1
git config pull.ff only

以上的命令只会影响当前的仓库。如果你想让所有的仓库都使用同样的策略,可以在命令中加上 --global 选项,例如 git config --global pull.rebase true。另外,在执行 git pull 命令时,你也可以通过命令行参数来临时指定使用哪种策略,例如 git pull --rebasegit pull --no-rebase

图示区别

图源知乎

图源知乎

总结

如果你想要一个干净、线性的提交历史,那么使用rebase

如果你想要保持真实的提交历史,那么使用merge