之前在进行分支开发的时候往往都使用merge,提交记录比较混乱。这里介绍一下使用rebase进行分支开发的实践。

  • 1、公司的项目一般都是一个main分支,代表线上环境。一个develop分支,是开发主分支。如果要开发新功能,一般是在develop分支的基础上切出一个feature分支。
1
2
3
4
5
6
# 切换到develop分支
git checkout develop
# 将develop分支拉取到最新
git pull origin develop
# 基于develop分支创建一个feature/test分支
git checkout -b feature/test
  • 2、在feature/test分支上进行代码开发,形成多次commit记录(注:开发过程中不要将develop分支合并到feature/test分支,开发完毕后再统一处理)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
touch index.js
git add .
git commit -m 'feat: add index.js'

touch index2.js
git add .
git commit -m 'feat: add index2.js'

touch index3.js
git add .
git commit -m 'feat: add index3.js'

touch index4.js
git add .
git commit -m 'feat: add index4.js'

# 开发完毕,先不整理代码格式,直接将代码推送到origin,触发ci/cd自动部署,给提出需求的人测试功能
git push origin feature/test
  • 3、开发完毕并测试通过以后,首先使用rebase整理本地分支代码commit记录
1
2
# 使用rebase交互式的编辑最近4次提交记录
git rebase -i HEAD~4

弹出一个git-rebase-todo的文件,选择要保留的commit记录。

1

修改如下,index1和2合并为一条commitindex3和4合并为一条commit。后面commit message信息先不改,编辑完保存然后关闭当前文件,会进行下一步合并后的commitmessage修改

2

编辑器打开了第一个COMMIT_EDITMSG的文件,这是让你编写index1 和 index2合并后的commit信息

3

编辑完毕后,点击保存

4

关闭当前页面,编辑器弹出了index3 和 index4合并commitmessage信息填写界面。同上,编辑保存关闭即可

5

全部编辑完毕后控制台弹出如下信息,代表rebase成功

6

执行git log --graph可以看待一条直线的记录。很舒服

7
  • 4、在feature/test分支的开发过程中,develop分支不可能一直不变,有些成员可能会直接基于develop分支进行开发和push。也有别的分支pull request合并到develop分支。因此需要切换到的develop分支,拉取最新代码。然后切换到feature/test分支,进行rebase
1
2
3
4
5
6
7
8
git checkout develop
git pull origin develop
git checkout feature/test
git rebase develop

# rebase 的过程中如果遇到冲突,首先编辑文件解决冲突,
# 然后git add .
# 最后git rebase --continue即可完成rebase
  • 5、由于之前为了测试已经把代码推送到origin,然后对本地又做了rebase。因此执行git push orign feature/test会报错。应该执行git push --force origin feature/test强制推送(注意:只有在自己的分支、单人开发的分支上才能使用 –force 强制推送
1
git push --force origin feature/test
  • githubpull requestdevelop分支。代码进行review。如果仍然有冲突(reivew时间过长,或者刚好有人push或者merge新的代码到develop分支),需要重新执行 4、5 两步。review通过以后选择rebase and merge合并 pr。