git rebase

介绍

merge 是一种简单方便的合并方法,但是它却不是唯一的方法,rebase 也可以进行合并。

merge 合并分支后图形会出现一堆交叉线,合并出现冲突,不管多少次冲突都只要解一次

rebase 合并分支后图形只会形成一条线,查看时清晰明了,合并出现冲突比较麻烦,如果出现多次冲突需要一次一次去手动解决

简单来说就是,merge是合并其他分支的内容,rebase也是合并其他分支的内容,但rebase会把本分支的commits放在分支最顶部

相关参数

git rebase --abort 放弃合并,回到rebase操作之前的状态,之前的提交的不会丢弃

git rebase --skip 会将引起冲突的commits丢弃掉,一般谨慎使用

git rebase --continue 合并冲突时用,结合"git add 文件"命令一起用与修复冲突。

git rebase

使用

在项目中master作为主分支,dev作为开发分支。

分支合并
此时dev分支上在正在a文件添加新功能,忽然master上a文件出现一个bug,需要紧急修复。

一般情况下我们都会先基于 master 下创新一个新的分支 hotfix,然后在hotfix中修复bug,后再合并到master。

合并完后,会出现一个问题,就是master和dev的a文件都进行的操作会发生冲突,这个时候要求master的分支图必须是一条线,所以要在dev使用git rebase 进行合并。

首先在dev分支中将master分支rebase过来,使用命令

# git checkout dev
# git rebase master

如果没有冲突的话,合并会很顺利,但是由于我们之前修复bug改了a文件,所以会出现冲突,git会停止rebase让你去解决冲突,所以我们需要手动解决完冲突。

在rebase的时候会提示冲突,当然也可以用diff查看冲突

# git diff

这一步解决冲突就是将修复bug的代码手动添加到当前a文件中。

解决完冲突后再执行add,提交修改

# git add a

提交完后,不执行commit,执行

# git rebase --continue

这样git会继续apply余下的补丁。

合并多次提交
//www.greatytc.com/p/913dad94f289

总结

rebase的目的是为了让分支图看起来是一条连续的commit line,避免不必要的commit形成分叉,方便后续code review。

在不是完全掌握rebase的情况下,多人开发的公共分支要把个人分支合并进来时,推荐merge,避免造成不必要的麻烦,

另外我们在pull的时候也可以使用rebase,使拉取远程代码到本地时的保证不会分叉,只形成一条commit line

# git pull –rebase

参考

//www.greatytc.com/p/cca69cb695a6

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • git 使用笔记 git原理: 文件(blob)对象,树(tree)对象,提交(commit)对象 tree对象 ...
    神刀阅读 3,798评论 0 10
  • 原文:Merging vs. Rebasinggit rebase一直是初级程序员想远离的黑魔法,但事实上在开发团...
    _夏兮阅读 1,039评论 0 3
  • 我是版本管理工具 白痴 之前项目一直在SVN上,自己对SVN的理解,其实差不多就是小乌龟直接只用svn check...
    KK葫芦娃阅读 3,123评论 0 8
  • Git 是目前最流行的分布式版本控制系统之一。 版本控制指的是,记录每次版本变更的内容和时间等细节,保留各版本之间...
    神齐阅读 1,464评论 0 7
  • 前段时间由于某种原因,开始接手开发公司前端Vue搭建的项目 该前端项目采用的是基于git rebase的形式去合并...
    0爱上1阅读 212,088评论 33 195