git rebase 操作、采坑

在协同开发时,有很多代码管理的方式,这里我列举我与同事协同开发时的方案

  1. 从 develop 分支拉取代码,创建自己的分支
  2. 完成本日开发任务后推送到 GitHub 上自己的分支,发合并申请,由同事相互检查错误代码【】,合并完成并删除自己分支(第二天开发时在创建自己分支)
  3. 使用 git rebase develop 分支变基,将上游分支 develop 分支上的最新代码合并到自己分支,并解决冲突
  4. 继续后续开发

本篇主要聊聊在使用 git rebase 时的流程、采坑

1. git rebase 合并代码、分支变基

因为同样是合并分支,所以就会有一个疑问,为什么不用 mergemergerebase 有什么差别?
那么首先我们聊聊这个问题
观察这两种命令的 commit 记录,可以梳理出他们的流程,如下图:
git rebase 操作、采坑_第1张图片
git rebase 操作、采坑_第2张图片
git rebase 操作、采坑_第3张图片
由此,我们可以得出mergerebase 的区别,merge 是将所有人的 commit 记录按时间合并排列,rebase 是按提交人的操作顺序将主线按线性排列。一个是按 commit 时间排,一个是按人排
git rebase 操作、采坑_第4张图片
图片来源:http://gitbook.liuhui998.com/4_2.html

接下来,就是开始使用 git rebase

第一种情况

$ git checkout xxx-dev
$ git rebase develop

或者不用切换分支,采用 git rebase [basebranch] [topicbranch] 的方式,basebranch是目的分支(即本例的 develop 分支),topicbranch是源分支(即本例的 xxx-dev 分支),总的意思是将 xxx-dev 分支中的修改变基到 develop 分支上。这样做能省去你先切换到 xxx-dev 分支,再对其执行变基命令的多个步骤。
即:

$ git rebase develop xxx-dev

git rebase 操作、采坑_第5张图片
得到 Successfully 则分支变基成功

在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;在解决完冲突后,用 git add命令去更新这些内容的索引(index),然后无需执行 git commit,只要执行:

$ git rebase --continue

这样git会继续应用(apply)余下的补丁。

在任何时候,你可以用–abort参数来终止rebase的行动,并且"xxx-dev" 分支会回到rebase开始前的状态。

$ git rebase --abort

第二种情况

在对两个分支进行变基时,所生成的“重放”并不一定要在目标分支上应用,你也可以指定另外的一个分支进行应用。
git rebase 操作、采坑_第6张图片

假设你希望将 next 中的修改合并到主分支并发布,但暂时并不想合并 dev 中的修改。 这时,你就可以使用 git rebase 命令的 --onto 选项,选中在 next 分支里但不在 dev 分支里的修改(即 B5 和 B6),将它们在 master 分支上重放:

$ git rebase --onto master dev next

以上命令的意思是:“取出 next 分支,找出处于 next 分支和 dev 分支的共同祖先之后的修改,然后把它们在 master 分支上重放一遍”。
git rebase 操作、采坑_第7张图片

现在回到 master 分支,进行一次快进合并。

$ git checkout master
$ git merge next

git rebase 操作、采坑_第8张图片
接下来还可以把 dev 分支的修改也整合进来,这里就不演示了,方法和示例一是一样的。

最后,分支中的修改都已经整合到主分支里了,你可以删除这两个分支:

$ git branch -d dev
$ git branch -d next

第二种情况借鉴于:Git:合并分支----git rebase命令的使用

2. git rebase -i 合并多个 commit

我们开发的过程中,可能会有多次的修补提交,就会出现多条提交记录和备注信息,此时我们可以使用 git rebase -i来合并多个commit,以简化提交记录

1.使用git log查看提交记录,查询完毕后按q键退出查询

$ git log

git rebase 操作、采坑_第9张图片
2.使用 git rebase -i 合并commit

git rebase -i  [startpoint]  [endpoint]
  • -i 的含义是:–interactive, 即弹出交互式的界面让用户编辑完成合并操作
  • [startpoint] 指的是合并区间的起点。
  • [endpoint] 指的是合并区间的终点,默认是当前分支 HEAD 所指向的 commit。
  • 注意:这里的区间是一个前开后闭的区间。

例如:

$ git rebase -i d2bf14b495fe57583371be8d0a48c927a2da7eb9 7fc6da429881c5bca2705f61aac0e3a1a3c0b1c7

或使用 git rebase -i HEAD~2

在终端输入:git rebase -i HEAD~2 这里的 HEAD~2 表示合并最近两次的提交,
如果想合并最近三次的提交修改为: git rebase -i HEAD~3

进入到 commit 信息编辑版面
git rebase 操作、采坑_第10张图片

  • p, pick = 保留该commit(缩写:p)
  • r, reword = 保留该commit,但我需要修改该commit的注释(缩写:r)
  • e, edit = 保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
  • s, squash = 将该commit和前一个commit合并(缩写:s)
  • f, fixup = 将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
  • x, exec = 执行shell命令(缩写:x)
  • b, break = 停在这里(稍后使用“git rebase—continue”继续rebase)
  • d, drop = 丢弃该commit(缩写:d)
  • l, label = 用名称标记当前磁头
  • t, reset = 将磁头复位到一个标签
  • m, merge [-C | -c ] [# ]
    使用原始合并提交消息(或者如果没有指定原始合并提交,则使用oneline)创建合并提交。使用 - c < commit> 重新编写提交消息。

git rebase 操作、采坑_第11张图片
修改完成后,按Esc键回到最下方命令行,输入:wq 完成保存并退出

ps:中途出现 rebase 可按照提示操作,如果可以忽略,则使用 git rebase --continue 来继续

3.执行完成后将弹出修改备注版面
git rebase 操作、采坑_第12张图片
完成编辑后,按Esc键回到最下方命令行,输入:wq 完成保存并退出git rebase 操作、采坑_第13张图片
待程序运行,最后得到Successfully的结果,即完成合并
git rebase 操作、采坑_第14张图片
4.最后再使用 git log 查看,之前的提交信息就都合并成了我们编辑的最后一条git rebase 操作、采坑_第15张图片
合并之后再推送的远程仓库,信息条目就清晰很多,条数也会相对较少

参考:
巧用 git rebase 合并多个 commit:https://www.cnblogs.com/yxhblogs/p/10527271.html
【Git】rebase 合并 commit 用法小结:https://www.jianshu.com/p/4a8f4af4e803
Git:合并分支----git rebase命令的使用:https://blog.csdn.net/qq_42780289/article/details/98078717
git rebase 合并分支命令:http://gitbook.liuhui998.com/4_2.html

你可能感兴趣的:(git,相关,代码管理,前端框架初步搭建)