【武sir_B站课程】git课程笔记_17/18/19_rebase专题

(0)引言

# 课程链接:

git实战(老男孩最新视频)_哔哩哔哩_bilibili

# 本文覆盖的课程内容【代码的双引号一律是引用的意思!!!】:

17_rebase应用场景一

18_rebase应用场景二

19_rebase应用场景三及注意事项


(1)rebase应用场景一

# (1)rebase(变基)【这个很重要,面试经常考】。其作用就是使git的提交记录变得更为简洁。以下给出三种应用场景进行讲解rebase。

                1)场景一。如图所示,假设公司给我们一个初始版本 C1 ,而后我们陆续提交了几天(也就是几个版本的代码),在最后一天,我们把最终版本 C5 提交上去。然而对于公司而言,他们只看最后 C5 版本的代码,对于中间陆续的几个过度版本,是不看的。因而我们提交时,就需要将多个版本记录,整合成一个记录。这个时候就需要 rebase 了。

                 2)实际操作。使用 "git rebase -i 。。。" 可以来进行版本的合并,其中 "。。。"处的一种可以是合并的起点版本的commit号。事实上,可以这么理解,上面的命令给的假设是v2版本的commit号,则合并就发生在v2,v3,v4三个版本。那么如图所示,就是实际的命令操作。

                另外,“。。。”处还可以是 HEAD~c(“c”的意思从最新版本往下数c个版本进行合并,那么也就是说如果c = 3,那么rebase就是将 v2,v3,v4一起合并起来,显然是包含HEAD的v4本身的往下数)【这也比较简单,更为常用】。如下图所示。

                此时很管关键,我们要对三个版本信息那里进行操作。如图所示,我们可以看到红色注释,s的意思,可以简单的理解为,v4前面是s,那么就是v4往v3进行合并,然后v3前面是s,那么v3和v4合并后的结果往v2进行合并【这是个人理解,可能有错】。

                在修改完后,我们要按 esc 键,然后看到最下面输入 “:wq”,就能够来到下图的画面,也是进一步的操作,该页面是让我们保存刚才提交版本的信息的。那么我们进行修改一下,如下图的下图所示,当然了这是可以自己按需求自定义的。完成修改后,我们依旧是按 esc 键退出。然后在最下面输入“:wq” 来保存更改。【要说一下,编辑的时候,要使用del来删除】

                 提交成功后,就会有如下画面:

               3 )最后使用 git log 来查看提交的结果,可以看到最后的三条我们合并成了一条,从而达到了使提交记录变简洁的目的。【同时要注意,我们使用rebase合并版本的时候,推荐是排除掉那些已经被推送到GitHub仓库的版本,也就是说只合并没推送的本地版本。】


(2)rebase应用场景二

# (1)使用 rebase归并分支

                1)场景二:如下图所示,如果说我们有两个分支(就是前面说的基本工作流),当我们基于master分支的C2版本,在dev 分支上创建了C3版本,如果当C3版本开发完成乃至最终合并成了C5版本后,我们可以使用rebase把dev分支的C3版本嵌入回master分支中,也就是如图所示的下面的只有一条线的。【为了更加清楚的解释 rebase 在归并分支的作用,我们首先对之前的 merge 方法进行复习和演示,而后才是 rebase】

                 2)如果是使用 merge 语句来归并分支。首先复习命令(假设现在处于master分支):那么  “git merge dev” 的意思就是将 dev 分支归并到 master 分支。简洁的把命令写出,git merge b  ,如果处在 a 分支,那么是 b 分支往 a 分支归并。如下图所示为merge语句归并的过程。

                顺序的话,这是第一张(忘记标注了)

                在第 3 步,这里需要补充新的命令,即git log 命令的延展。“git log --graph” 命令是显示各分支的版本记录的拓扑结果(可以这么理解?反正就是图形的结果,更直观)。同时我们也可以更加简洁的查看,即使用 “git log --graph --pretty=format:"%h %s"  ”命令可以简化整个版本记录的显示,该命令也是今后常用的。【但是要注意啊,这里merge实际上是保留dev分支的插入,从后面提交的拓扑记录可以看出来】

               

                3)使用rebase来完成上述场景的需求。rebase的话,实际上就是正儿八经变成一条线,也就是1)中图示。那么具体的实施语句如下图示。要解释的是

 ~~~~~~做图不易呀啊呀,下图是第二张图,最后的是第三张图~~~~~~~


(3)rebase应用场景三及注意事项

# (1)忘记推送代码续集

                1)场景三:这是上次忘记推送代码的场景了,这里如图所示,圆圈代表 github 仓库,三里屯(三,就是工作地点),这里假设我们在工作地点写完了 v1 版本的代码,但是没有推送到仓库中,而后回家我们没法拿到工作地点写的 v1 版本,因此我们转去写 v2 版本的代码,并且推送到仓库。当我们回到工作地点时,如果直接使用 “git pull origin dev” 命令从仓库拉取代码(v2),那么在 git 中就会隐含 v1 和 v2 版本进行了合并,并且极有可能造成分叉。据此,我们需要使用rebase来完成这个事情。

                 2)解决分叉。在回到公司后,我们不能再使用 git pull origin dev 命令来拉取代码,而是分成两步走。首先是 "git fetch origin dev" 将代码拉取下版本库中(此时不合并);然后执行 "git rebase origin/dev" 命令来将拉取下来的 v2 与本地的 v1 进行合并,如此就不会产生分叉了。【如果是master ,那就替换一下就行了,如 git rebase origin/master!!!同时注意,如果第二个语句是使用 merge命令的话,那效果和git pull 。。。是一样的】

【】【】【】【】【】【】【】【】【】【无图】【】【】【】【】【】【】【】【】【】

# (2) 注意事项

                1)执行 git rebase 时产生冲突。首先要手动的解决掉冲突,然后根据提示,执行git add . 命令,然后执行 git rebase --continue。下面给出实例,具体可以看图内的文字解释了。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值