Git Rebase使用方法

Git Rebase有两种使用场景:
一、对本地分支代码多次commit进行合并
二、对本地分支代码进行变基操作,将其他分支commit合入到当前分支

一、合并commit记录:
在工作中,有些同学的习惯是将每天编写的代码进行提交,这样本地就会有多次commit记录,如果提交到主库上就对它的commit记录造成了污染。

步骤:
(1)获取提交记录,确认需要合并最近3条记录
$ git log --pretty=oneline -4
auiregfq8234g0923h09fdadfoiasdfhoiasdhf03f2oia Req:333
asdfasdaqw3f212543512345231234123gwrgwreg Req:222
34trgw354t2gdfwegq34t234t23gwegrwergwetg234 Req:111
234t23ggeegr34trgw35rgwetg23dfwegq34tw4t2w4 BUG:fix xxx

(2)合并最近三次提交
$ git rebase -i HEAD~3

提交后会进入编辑模式,注意下,这里的顺序会跟git log查出来相反。

pick 34trgw Req:111
pick asdfas Req:222
pick auireg Req:333


# Rebase 5f2452b2..8f33126c onto 5f2452b2 (4 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#

(3)将后面两个pick改为s(这样做的效果就是222和333的代码合并到111这次commit中)

pick 34trgw Req:111
s asdfas Req:222
s auireg Req:333

(4)然后保存退出,会进入另外一个编辑器中,这时可以对commit信息进行修改(把Req:111改为Req:new info),再保存退出

# This is a combination of 3 commits.
# The first commit's message is:
Req:111

# This is the 2nd commit message:
Req:222

# This is the 3rd commit message:
Req:333

(5)rebase完成,再用$ git log --pretty=oneline -2查看得到:

34trgw354t2gdfwegq34t234t23gwegrwergwetg234 Req:new info
234t23ggeegr34trgw35rgwetg23dfwegq34tw4t2w4 BUG:fix xxx

二、分支变基:


image.png

1.先从master上chckout出一个分支;
2.master和feature各自演进;
3.feature准备合入master。

以前我是用git reset --soft退回master记录,再本地stash,pull完代码后,再进行unstash。
现在就可以直接在feature上执行rebase操作来代替上述操作:
1.git checkout master
2.git pull origin master
3.git checkout feature
4.git rebase master

第四步rebase干了哪些事呢?
先将master分支的代码checkout,存到工作目录下,然后将feature分支的commit依次合并。
如果合并的过程没问题,也就是没有冲突,那rebase到这里就算完成。

如果发生了冲突的情况,就会报错error:Failed to merge in the changes.
自行解决冲突完毕后,使用git add .命令添加修改文件,然后使用git rebase –continue完成整个rebase过程。

如果你不想处理冲突,有两种方式恢复:
一、使用git rebase –abort放弃此次操作,分支会回到 rebase 开始前的状态。
二、使用git rebase –skip,用master分支的取代当前feature分支。

注:git rebase会导致其他开发的feature分支和你的feature出现不一样的历史,因此在多人协同开发同个分支的情况下需要谨慎使用

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

推荐阅读更多精彩内容

  • git 使用笔记 git原理: 文件(blob)对象,树(tree)对象,提交(commit)对象 tree对象 ...
    神刀阅读 3,801评论 0 10
  • Git飞行规则(Flight Rules) 前言 英文原版README 翻译可能存在错误或不标准的地方,欢迎大家指...
    骑摩托马斯阅读 1,646评论 0 8
  • 朋友整理的,放这里偶尔过来看看 一、基本介绍 首先,Git作为版本控制系统,他的原理与SVN为首的集中式版本控制系...
    allenzhan阅读 1,028评论 0 3
  • 多种多样的工作流使得在项目中实施Git时变得难以选择。这份教程提供了一个出发点,调查企业团队最常见的Git工作流。...
    JSErik阅读 4,483评论 2 8
  • 下笔之前,本想将标题冠之以“人性本恶OR善”此般的大命题,但是面对这个讨论了数千年、仍然悬而未决的争议性话题,实难...
    城市行者阅读 1,032评论 0 0