暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

git合并代码命令的区别使用场景解析

叶归林 2021-09-01
1111
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。


留言板

文章转载自叶归林,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论