1.1 变基提交

1.1.1 git rebase 命令是用来改变一串提交是以什么为基础的。

比如,有两个分支正在开发中,最初,topic分支是从master分支的提交B处开始的,在此期间,master分支已经进展到提交E。

可以改写提交让它们基于提交E而不是B,这样就相当于在master分支最新的基础上分出的分支进行开发。

git checkout topicgit rebase master 

1.1.2 git rebase --onto  可以将一条分支上的开发线整个移植到完全不同的分支上。

比如已经在feature上开发了一个新功能,在提交P和Q中,是基于maint分支的。要把feature分支上的提交P和Q从maint分支整体迁移到master分支:

git rebase --onto master maint^ feature

变基操作一次只能迁移一个提交,从各自原始提交位置迁移到新的提交基础。因此,每个移动的提交都可能有冲突需要解决。

举例:

toney@sw2:~/work/project/dragon/core/code/customer/cus_dlinkg2$ git branch
* AAAmastermaster_dragontoney@sw2:~/work/project/dragon/core/code/customer/cus_dlinkg2$ git log -n3
commit d54bfd23d30d1ff6aea5fc6197f13a579cf33521
Author: chk <chk@163.com>
Date:   Sun Aug 18 21:21:41 2019 +0800bcommit a7899fd5a67302d5ceb02914f26955f6e3587ba2
Author: chk <chk@163.com>
Date:   Sun Aug 18 21:21:27 2019 +0800acommit 11316b05d9eb14d0be27cb5efb8e0ef3120fce95
Author: chenhaodai <chenhaodai@nettech-global.com>
Date:   Tue Jul 18 14:06:06 2017 +0800[Dragon-SDK-Shell]optimise sdk diag shelltoney@sw2:~/work/project/dragon/core/code/customer/cus_dlinkg2$ git checkout master_dragon
Switched to branch 'master_dragon'
Your branch is up-to-date with 'origin/master_dragon'.toney@sw2:~/work/project/dragon/core/code/customer/cus_dlinkg2$ git log -n5
commit 42947bf9888c01669ed3541ddb7d585502f38bc8
Author: zhigang <zhigangfeng@nettech-global.com>
Date:   Fri Jul 28 11:03:24 2017 +0800[DBS]This is the local pagecommit 3162d0391dbabff2ba7effe252f6c8b1aabed541
Author: yangjun <yangxiaojun@nettech-global.com>
Date:   Mon Jul 24 15:44:07 2017 +0800[Dragon-Function-Implement]:Single fw support for 52MP(Rtk839X)commit 846c0af7a77559d989dbc60be88facecc1ddfc3c
Author: chenhaodai <chenhaodai@nettech-global.com>
Date:   Thu Jul 27 14:05:21 2017 +0800Dragon-fix: FW upgrade will cause crashcommit d8a0e2cd3c9cd3e32588cdccc62ebc002cf79462
Author: yangjun <yangxiaojun@nettech-global.com>
Date:   Thu Jul 20 18:33:37 2017 +0800[Dragon-Fuction-Implement]:Support Single fw for 28P/10MPcommit 11316b05d9eb14d0be27cb5efb8e0ef3120fce95
Author: chenhaodai <chenhaodai@nettech-global.com>
Date:   Tue Jul 18 14:06:06 2017 +0800[Dragon-SDK-Shell]optimise sdk diag shelltoney@sw2:~/work/project/dragon/core/code/customer/cus_dlinkg2$ git checkout AAA
Switched to branch 'AAA'toney@sw2:~/work/project/dragon/core/code/customer/cus_dlinkg2$ git rebase master_dragon
First, rewinding head to replay your work on top of it...
Applying: a
Applying: btoney@sw2:~/work/project/dragon/core/code/customer/cus_dlinkg2$ git log -n3
commit 94f9dc2dc625735f3e9cbcfa3794152bc87c7986
Author: chk <chk@163.com>
Date:   Sun Aug 18 21:21:41 2019 +0800bcommit 295671c0b394db080fb8d8ef1fe5ada3b2771806
Author: chk <chk@163.com>
Date:   Sun Aug 18 21:21:27 2019 +0800acommit 42947bf9888c01669ed3541ddb7d585502f38bc8
Author: zhigang <zhigangfeng@nettech-global.com>
Date:   Fri Jul 28 11:03:24 2017 +0800[DBS]This is the local page

1.1.3 git rebase -i 

使用git rebase -i 可以对提交进行重新排序,编辑,删除,把多个提交合并成一个,把一个提交分离成多个。

举例:

  • 调整提交的顺序:
toney@sw2:~/work/project/dragon/core/code/customer/cus_dlinkg2$ git log -n3
commit 436d7cf4a0d762bfc5fbb42daedcda867cf4cde9
Author: chk <chk@163.com>
Date:   Mon Aug 19 21:23:37 2019 +0800ccommit 94f9dc2dc625735f3e9cbcfa3794152bc87c7986
Author: chk <chk@163.com>
Date:   Sun Aug 18 21:21:41 2019 +0800bcommit 295671c0b394db080fb8d8ef1fe5ada3b2771806
Author: chk <chk@163.com>
Date:   Sun Aug 18 21:21:27 2019 +0800

对b和c的提交顺序进行修改:

toney@sw2:~/work/project/dragon/core/code/customer/cus_dlinkg2$ git rebase -i HEAD~3GNU nano 2.2.6   File: /home/toney/work/project/dragon/core/code/customer/cus_dlinkg2/.git/rebase-merge/git-rebase-todo            pick 295671c a
pick 436d7cf c
pick 94f9dc2 b# Rebase 42947bf..436d7cf onto 42947bf
#
# 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

查看效果:

toney@sw2:~/work/project/dragon/core/code/customer/cus_dlinkg2$ git log -n3
commit fc3a4259add2cd796744ba74e7de1feecd3956b1
Author: chk <chk@163.com>
Date:   Sun Aug 18 21:21:41 2019 +0800bcommit 637f3f836d7bb7c7be9e087f70c30edae2f672b1
Author: chk <chk@163.com>
Date:   Mon Aug 19 21:23:37 2019 +0800ccommit 295671c0b394db080fb8d8ef1fe5ada3b2771806
Author: chk <chk@163.com>
Date:   Sun Aug 18 21:21:27 2019 +0800a
  • 合并提交:
toney@sw2:~/work/project/dragon/core/code/customer/cus_dlinkg2$ git rebase -i HEAD~3GNU nano 2.2.6   File: /home/toney/work/project/dragon/core/code/customer/cus_dlinkg2/.git/rebase-merge/git-rebase-todo            pick 295671c a
squash 637f3f8 c
pick fc3a425 b# Rebase 42947bf..fc3a425 onto 42947bf
#
# 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

查看效果:

toney@sw2:~/work/project/dragon/core/code/customer/cus_dlinkg2$ git log -n3
commit e10192dd278c0eada10636df5264ec42a39b37e9
Author: chk <chk@163.com>
Date:   Sun Aug 18 21:21:41 2019 +0800bcommit aec5216b3f7096e5b3425c850ca324ac4444da78
Author: chk <chk@163.com>
Date:   Sun Aug 18 21:21:27 2019 +0800accommit 42947bf9888c01669ed3541ddb7d585502f38bc8
Author: zhigang <zhigangfeng@nettech-global.com>
Date:   Fri Jul 28 11:03:24 2017 +0800[DBS]This is the local page

git 进阶 (四)变基提交相关推荐

  1. git rebase(变基)—— Git 学习笔记 19

    git rebase(变基) 认识 git rebase 假设你现在基于远程分支"origin",创建一个叫"mywork"的分支. $ git checkou ...

  2. 两条命令让你的git轻松自动变基,学到了!

    大厂技术  高级前端  Node进阶 点击上方 程序员成长指北,关注公众号 回复1,加入高级Node交流群 作者:张京 链接:https://segmentfault.com/a/1190000040 ...

  3. Git合并和变基简介:它们是什么,以及如何使用它们

    by Vali Shah 通过瓦利沙阿 Git合并和Git变基简介:它们做什么以及何时使用它们 (An Introduction to Git Merge and Git Rebase: What T ...

  4. Git 分支 - rebase 变基

    变基 在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase. 在本节中我们将学习什么是"变基",怎样使用"变基",并将展示该操作的 ...

  5. Git rebase(变基)操作详解

    目录 简单变基操作 复现 变基 更复杂的变基 复现 变基 变基操作建议 简单变基操作 复现 先复现一个变基操作的现场,具体做法如下: (1)创建一个testrebase目录,在该目录下执行git in ...

  6. Git进阶:修改上次提交 git commit --amend

    一.问题说明 git commit 后,发现刚才的备注写错了,或者代码漏掉了,想取消刚才的提交.此刻有两种方法 (1)使用git reset命令将刚才的提交会退掉(需要注意的是git reset -- ...

  7. git 合并提交(交互式变基)

    在代码没有pull前我们可以在本地分支进行提交的合并.这样会使得远程分支不去关心本地开发过程日志,而使得远程日志干净整洁. 变基前log 找到要合并的第一条log,然后右键选择Interactivel ...

  8. git 查询提交明细_Git [提交记录查看、提交、变基](I)

    查看提交记录 终端命令 git log:列出历史提交记录; 记录查看 git log --oneline:查看历史记录的简洁的版本; 简洁记录查看 提交 提交规范 feat: 新功能 fix: 修复问 ...

  9. git rebase 变基

    概念 变基(Rebase)也是合代码的一种手段. 变基与合并(Merge)不同的是,他可以修改历史,使用rebase来代替merge合代码的话,得到的历史记录是一条直线提交历史,无分叉,很漂亮. 然而 ...

最新文章

  1. CentOS下用yum管理软件的好处
  2. 国际农产品交易模式 东亚模式对话国际农民丰收节贸易会
  3. BZOJ1565:[NOI2009]植物大战僵尸——题解
  4. 数据与计算机通信复习重点
  5. Python+Opencv图像处理新手入门教程(一):介绍,安装与起步
  6. 微软推出 Power Platform 漏洞奖励计划
  7. python oj题目_Python OJ 从入门到入门基础练习 10 题
  8. ubuntu(linux)占领小米平板2(mipad2)
  9. 数据科学家应该掌握的12种机器学习算法(附信息图)
  10. iPhone is busy: Preparing debugger support for iPhone的解决办法
  11. 微信服务号开发IOS设备js-sdk认证失败问题总结
  12. 添加几行代码实现百度文库的复制
  13. 苹果开场铃声 android,推荐几款免费安卓、苹果手机铃声剪辑软件?
  14. 哇塞!这是我见过的最牛逼的性能监控系统,集强大功能于一身~
  15. Predicting drug–disease associations through layer attention graph convolutional network 论文解析
  16. 设计模式系列:依赖倒置原则
  17. 对WEB应用的粗浅理解
  18. OAuth client 微信、qq、新浪登录
  19. 光照探针 Light Probe
  20. 神经网络在控制中的应用,神经元网络控制的作用

热门文章

  1. C语言:选列主元约当消元法求线性方程组唯一解
  2. office 2016错误代码30175-13(30) win10
  3. 循环辅助continue、break
  4. android 开启子线程方法,android中开启子线程
  5. java stream order by_Java Stream 使用详解
  6. QQ自动强制加好友代码
  7. 最新版WinRAR5.61去广告代码教程分享(仅供学习交流)
  8. Android实现截屏和截长图功能的几种方法
  9. 教程:这两个小妙招手把手教会你白底图片怎么抠图
  10. android7.1 打印机 (ghostscript+hpijs - hplip)