git rebase 操作、采坑

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

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

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

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

因为同样是合并分支,所以就会有一个疑问,为什么不用 mergemergerebase 有什么差别?
那么首先我们聊聊这个问题
观察这两种命令的 commit 记录,可以梳理出他们的流程,如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由此,我们可以得出mergerebase 的区别,merge 是将所有人的 commit 记录按时间合并排列,rebase 是按提交人的操作顺序将主线按线性排列。一个是按 commit 时间排,一个是按人排
在这里插入图片描述
图片来源: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

在这里插入图片描述
得到 Successfully 则分支变基成功

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

$ git rebase --continue

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

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

$ git rebase --abort

第二种情况

在对两个分支进行变基时,所生成的“重放”并不一定要在目标分支上应用,你也可以指定另外的一个分支进行应用。
在这里插入图片描述

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

$ git rebase --onto master dev next

以上命令的意思是:“取出 next 分支,找出处于 next 分支和 dev 分支的共同祖先之后的修改,然后把它们在 master 分支上重放一遍”。
在这里插入图片描述

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

$ git checkout master
$ git merge next

在这里插入图片描述
接下来还可以把 dev 分支的修改也整合进来,这里就不演示了,方法和示例一是一样的。

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

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

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

注意:在使用git rebase dev 命令时,可能会出现合并冲突,需要先解决冲突之后再使用git add 缓存,然后使用git rebase --continue继续合并,如果出现 You are currently rebasing branch ‘tiansi-dev’ on ‘ff87463’ ,则重新打开 git bash 将刚才缓存的文件commit一次,然后git rebase --continue继续合并

2. git rebase -i 合并多个 commit

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

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

$ git log

在这里插入图片描述
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 信息编辑版面
在这里插入图片描述

  • 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 ]

在这里插入图片描述
修改完成后,按Esc键回到最下方命令行,输入:wq 完成保存并退出

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

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


vim 编辑器部分语法

进入编辑模式:

小写i:在光标所在行位置停止不动开始写入内容
大写I:在光标所在行行首开始写入内容
小写a:在光标所在行当前字符后开始写入内容
大写A:在光标所在行行尾开始写入内容
小写o:在光标所在行下一行开始写入内容
大写O:在光标所在行上一行开始写入内容

退出编辑模式:

:w:保存文本
:q:退出编辑模式
:w!:强制保存,在root用户下即使文本只读也可以强制保存
:q!:强制退出,所有改动不生效
:wq:保存并退出


参考:
巧用 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 commit --amend 以及退出 vim 编辑器:https://blog.csdn.net/Cathence/article/details/80529488

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值