Git专题:合并代码保留提交记录:rebase功能使用

24.1 merge 合并

git merge命令和git rebase应用场景很类似,在这一节当中我们先使用git merge进行合并操作一次,然后大家注意观察版本记录列表中的版本记录顺序。

24.1.1 在 test 分支修改代码

现在首先我切换到test分支中,执行命令如下所示:

git checkout test

命令执行完毕之后,Git 返回信息如下图所示:
图片描述
在上图中,可以看到已经切换到test分支当中,现在我随意在test分支当中修改代码,然后提交一个版本,执行命令如下所示:

echo '44444444' >> aa.txt && git commit . -m 'rebase测试'

命令执行完毕之后,会修改aa.txt文件的代码,并执行了git commit提交工作区的修改到新版本中,返回信息如下所示:
图片描述
在上图中可以看到提交新版本成功。

24.1.2 将 test 分支推送到远程仓库

一会使用git rebase命令演示时候还需要当前的场景,这里我将刚才提交的版本推送到远程去,这样需要恢复当前版本的时候就可以用远程覆盖本地版本,免得重复构建实验环境。

执行推送到远程仓库的命令如下所示:

git push --set-upstream origin test

命令执行完毕之后,远程仓库返回的信息如下图所示:
图片描述
在上图中可以看到推送到远程仓库已经成功,接下来在develop也进行一些改动。

24.1.3 在 develop 分支修改代码

首先切换到develop分支中去,执行命令如下所示:

git checkout develop

命令执行完毕之后,Git 返回信息如下图所示:
图片描述
在上图中可以看到已经切换到develop分支,接着我随意的修改代码提交几个版本,执行命令如下所示:
develop仓库提交代码多次代码。

echo '1111111111' >> aa.txt && git commit . -m 'rebase测试'
echo '2222222222' >> aa.txt && git commit . -m 'rebase测试2'
echo '3333333333' >> aa.txt && git commit . -m 'rebase测试3'

命令执行完毕之后,Git 返回的信息如下图所示:
图片描述
在上图中可以看到提交了三个版本,

24.1.4 使用merge命令合并代码

接着我们回到test分支中,并使用git merge命令将develop分支的代码合并过来,回到test分支的命令如下所示:

git checkout test

命令执行完毕之后,Git 返回的信息如下图所示:
图片描述
在上图中可以看到已经切换回 test 分支当中,接着使用git merge命令合并代码,执行命令如下所示:

git merge develop

命令执行完毕之后,Git 返回的信息如下图所示:
图片描述
在上图中可以看到合并代码成功,显示了一行代码变更,我们现在就可以使用git log命令查看版本日志列表的效果了,执行命令如下所示:

git log

命令执行完毕之后,Git 返回的版本列表信息如下图所示:
图片描述
在上图中可以看到刚才分别在两个分支下提交的四个版本,在版本列表中顺序是时间的先后顺序,最开始在test分支提交的版本在最下方,后来切换到develop分支提交的三个版本在上方,最上方的版本为merge branch的版本记录,先记住这是git merge命令合并代码效果。

24.2 rebase 效果

接下来我们来试试git rebase命令的效果,通过版本记录列表对比两者有什么区别,我们现在依然在test分支下。

24.2.1 从远端恢复环境

使用git reset命令将版本撤销到git merge前的状态,直接以远端为准即可,执行命令如下:

git reset origin/test  --hard

命令执行完毕之后,Git返回的信息如下图所示:
图片描述
在上图中可以看到分支的版本已经回滚成功,我们可以使用git log命令来查看版本列表进行确认,执行的命令如下所示:

git  log

命令执行完毕之后,Git 返回的版本列表如下图所示:
图片描述
在上图中可以看到当前只有rebase测试这个版本了,其他几个版本已经被撤销。

24.2.2 使用 rebase 命令复制版本记录

接着我们使用git rebase命令将develop分支的代码复制过来,执行的命令如下所示:

git rebase develop

命令执行完毕之后,Git 返回的信息如下图所示:
图片描述
在上图中可以看到git rebase已经成功执行,接着我们使用 git log 查看提交日志,执行命令如下所示:

git log

命令执行完毕之后,Git 的版本列表如下图所示:
图片描述
在上图中可以看到四个版本顺序与之前git merge版本记录是不一样的,git rebase命令后版本顺序不是按照时间,而是将develop分支的版本记录放在下方,在当前分支提交的同时也没版本放在最上方,有产生一个Merge branch的版本记录。

24.3 小结

在这节中我们学习了一个git rebase命令,这个命令如果仅仅从代码层面比较,基本是没有区别的,主要的区别在于版本记录的变化,比如说,因为一些情况我需要在test分支修改一些代码,如果我使用了 merge 命令将 develop 的版本合并了进来,后续我想去撤销这次修改的代码,就比较麻烦。

因为git merge合并后的版本记录的顺序是按照时间顺序来的,这样在test分支提交的版本就可能离当前工作区非常远,这样要撤销起来会影响太多版本记录,而如果是git rebas命令进行的代码合并,它并不是按照时间来排序的,而是一定把 test分支的提交放在离工作区最近, 这样当需要撤销的时候影响面就很小,我们主要记录两个区别:

  1. git merge命令合并代码之后,版本记录会按照时间顺序排序,并自动产生一个Merge branch的版本;
  2. git rebase命令合并代码之后,版本记录会将目标分支的版本放在后面,然后再将当前分支的版本记录放在前边。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值