Git Rebase
尽量合理使用Rebase,而不是大量使用merge,原因很简单,多人开发情况下,使用Git merge会造成大量分支交叉的情况,代码结构看起来很乱,强迫症者很难受。
但是,使用Git Rebase也要合理,尤其是在主分支(master/main)上,禁止在主分支上执行Git Rebase操作,理由是Git Rebase操作会修改commitID,当有别人在主分支拉取代码了之后,你又在主分支执行rebase操作,有可能会导致主分支的commitID改变。
所以,我建议以feature为单位,如果多个人处理一个feature的时候,可以采用rebase操作,但是再合并到主开发分支,或者主发布分支的时候,采用squash and merge操作来减少非必要的commit消息,同时保证主分支的commit安全性。
流程介绍
首先我的项目有四个分支分别是:main、dev、dev-0、dev-1;
这三个分支分别是主分支,开发分支,业务人员0的开发分支、业务人员1的开发分支;
初始的分支情况如图所示:

此时,main分支提交了一个commit<main分支提交第1次>,dev分支提交了一个commit<dev添加第1次>,dev-0和dev-1此时从dev分支创建。
第一步:dev-0提交
我们在dev-0分支提交几次commit,提交后的图如下图所示:

此时dev-0提交了几个分支。
第二步:dev-1提交
我们在dev-1分支同时也提交几次commit,提交后的图如下图所示:

此时dev-0和 dev-1 彼此之间的分支远离开了。
第三步:dev-0和dev-1合并
dev-0 和 dev-1 开发完毕需要合并分支提交测试了,此时我们使用git rebase 操作,如下:
假如我们最终用dev-0的分支提交测试,此时我们执行:
git checkout dev-0 # 切换到dev-0分支
git rebase origin/dev-1 # 变基到dev-1分支上
此时可能会发生冲突,我们根据提示,解决冲突,执行git add+ git rebase --continue,直到出现successful提示,这表示我们变基成功。
此时分支情况如下图所示:

此时我们的dev-0已经成功变基在dev-1的提交上了,此时我们可以将我们的提交push到dev-0的远程分支上,执行:git push -u origin dev-0会报错,如下图所示:

因为本地的dev-0通过rebase操作添加了dev-1的三个commit而远端的dev-0还没有这三个commit,所以会导致push失败,此时我们需要强制push,执行git push -f origin dev-0
此时的提交图如下图所示:

此时dev-0 和 dev-1 的所有更改都在 dev-0 上。
第三步:dev-0合并到dev分支
接着我们将dev-0合并到 dev 分支上
此时我们通过git来创建一个pull request, 并且在选择合并方式时选择squash and merge,将多个commit消息合并成一个commit再执行提交,再界面上输入合并后的commit消息

此时合并后的分支结构如下图所示:

dev分支上新增一个commit消息,这个时候就已经完成了开发分支的合并工作了,此时只需要根据开发分支去提测就行了😇😇
第四步:简单回滚操作
如果出现问题了怎么办,可以通过回滚操作来回退之前的版本,例如,我们新提交的这个分支有问题,我们需要回退到之前的版本怎么办,通过git reset命令来操作:
git reset "需要回退到哪个版本,这里填那个版本的commit ID"
git push -f origin dev
此时分支结构图如下:

此时dev分支已经回退到上一个版本了,可以通过对dev-0分支再次执行修改操作,然后再通过创建squash and merge请求合并到dev分支上。
结语
Git的操作有很多,但是一定要注意团队开发内部需要统一规范操作,否则等到项目越来越大的时候,维护会变得越来越困难。- 多人合作开发的时候,要养成定期
git fetch的习惯,并且每隔一段时间合并一次代码,而不是开发完成后再合并,避免冲突爆炸。