git rebase 命令

git rebase是一个非常有用的命令,但可能熟悉它的人比较少。下面介绍一下git rebase的常见用法。

git rebase branch

我们在作分支合并的时候最常用的就是merge操作,但是执行merge之后,会产生一个新的commit,例如:Merge branch 'branch-1'。这个commit把两个branch合并到一起并作了一次新的提交。但是,如果使用rebase的话就会避免这个问题。我们来看一个例子,下边是我分别用merge和rebase之后的git log。

* 5eaa8f8 (HEAD -> master) commit 8

* fdadab0 commit 7

* 690e761 (branch-2) commit 10

* f8bcb41 commit 9

* a1e3e91 Merge branch 'branch-1'

|\

| * da2448e (branch-1) commit 6

| * c4ef94a commit 5

* | c70cc70 commit 4

* | 31fde3f commit 3

|/

* faf3890 commit 2

* 0f1f7a8 commit 1

我的操作历史如下:首先,在master创建进行了两次提交(commit 1, commit 2)-> checkout新的分支branch 1 -> 在master上进行两次提交(commit 3, commit 4)-> 在branch 1上进行两次提交(commit 5, commit 6)-> checkout到master,执行git merge branch-1。然后merge完成后便产生了a1e3e91 Merge branch 'branch-1'这个提交。

接着我们演示rebase,checkout 新分支branch 2 -> 在master上进行两次提交(commit 7,commit 8)-> checkout到branch 2上,进行两次提交(commit 9, commit 10)-> checkout到master执行git rebase branch-2。这时我们来看主干分支,并没有产生多余的提交。

git rebase branch-2命令执行的时候会把"master"(即当前分支)分支里的每个提交(commit)取消掉,并且把它们临时保存为补丁patch(这些补丁放到".git/rebase"目录中),然后把"master"分支更新到最新的"branch-2"分支,最后把保存的这些补丁应用到"master"分支上。这些新应用的commit将会是新的commit,commit号会变。上例中commit 7,commit 8的commit号已经变了(原有的commit号分别是:cc4df2d,c86a6da)。

git pull --rebase

当我们从远程拉代码的时候如果使用:git pull --rebase,则会以rebase的方式进行更新,而不是默认的merge。

git rebase --interactive

git rebase用来修复commit,比如修改某次提交,修改commit message,squash。该命令可以简写为git rebase -i。执行该命令之前需要当前branch已经设定过upstream,使用git branch --set-upstream-to=/可以设定upstream。执行rebase -i命令后的交互如下,我已经针对commit做了修改:

GNU nano 2.5.3 File: /home/focusj/3stone/diamond/.git/rebase-merge/git-rebase-todo

pick c4a4b5d test

squash c4a4b6d test

drop c4a4b7d test

# Rebase 0df8fd7..c4a4b5d onto 0df8fd7 (1 command(s))

#

# 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

#

[ Read 20 lines ]

^G Get Help ^O Write Out ^W Where Is ^K Cut Text ^J Justify ^C Cur Pos ^Y Prev Page M-\ First Line M-W WhereIs Next

^X Exit ^R Read File ^\ Replace ^U Uncut Text ^T To Spell ^_ Go To Line ^V Next Page M-/ Last Line M-] To Bracket

下边说下几个command的用处:

p:保留当前commit,不做处理。

r:修改commit message。

e:修改这个commit作的修改。比如某个commit漏掉了什么配置,想要再提交新的文件; 或者删除一些无用代码,等等都可以用这个命令。

s:保留这个commit的修改,但是把它合并到前一个commit中。

d:删除commit。

我们使用命令,只需要把命令放到mouge commit前边保存退出既能生效。

write on 2017-1-3

git rebase 命令 常用_git rebase命令相关推荐

  1. linux下的网络管理命令,常用linux网络管理命令(下)

    常用linux网络管理命令(下) ip:更改或显示路由.IP.协议等信息 ip link:接口管理 show [DEVICE]:显示网卡接口信息 set [DEVICE] [up | down]:开启 ...

  2. linux读取一行数据命令,常用的linux命令和逐行数据处理的例子

    原标题:常用的linux命令和逐行数据处理的例子 Linux具有开源,处理性强等优点. 并且由于生物数据量较大,对数据处理性能要求更高, 所以生物信息分析软件大多都是针对linux系统进行开发的. 在 ...

  3. git rebase 命令 常用_git命令之 git rebase 常用

    git rebase 命令的功能很强大, 在<git 权威指南>一书里,改变提交(commit)的顺序,书中教了一种很复杂的方法,运用了git reset ... git cherry-p ...

  4. 全网git最全相关常用基本用法命令大全及分支操作指南命令(霸霸看了都说好)

    Git 基本操作 Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比. Git 常用的是以下 6 个命令:git clone.git push.git add .git commit.gi ...

  5. 了解linux常用的命令,常用的linux命令(1)-了解常用命令

    最近身边的小伙伴都想学习下linux基础,刚好会那么一些,在这里分享下,希望可以一起学习,一起进步: 1.liunx命令分类 内部命令:属于shell解释器的一部分 外部命令:独立于shell解释器之 ...

  6. git 删除tag_Git常用命令

    资源列表: Git Book 深入浅出Git教程(转载) Git使用详细教程 名词介绍 Workspace:工作区Index/Stage:暂存区,也叫索引Repository:仓库区(或本地仓库),也 ...

  7. Java 开发常用的 Linux 命令知识积累

    来源 | siye1982.github.io/2016/02/25/linux-list/ 写在前面 基本操作 Linux关机,重启 查看系统,CPU信息 建立软连接 rpm相关 sshkey 命令 ...

  8. 操作系统必知必会:Linux(1)常用的Shell命令

    操作系统必知必会:Linux(1)常用的Shell命令 常用的Shell命令 磁盘管理 cd df du mkdir pwd ls 文件管理 cat chmod chown cp diff file ...

  9. mongodb中常用的shell命令

    mongodb中常用的shell命令 常用的shell命令 1.帮助命令 2.数据库操作命令 3.创建数据库和集合 4.集合中的文档(document)操作 5.聚集集合查询 常用的shell命令 1 ...

  10. Doc窗口打开方法及常用的Doc命令

    Doc窗口打开方法及常用的Doc命令 Doc窗口打开方式:1.win+r键后弹出一个窗口输入cmd命令 常用的dos命令. 1mkdir abc创建一个目录. 2切换盘符 C: 回车 D:回车 3切换 ...

最新文章

  1. java 流的概念_举例讲解Java中的Stream流概念
  2. 解决向数据库mysql插入double数据小数点不显示问题
  3. C++primer: 引用与 const 引用
  4. bootice添加linux_如何使用老毛桃winpe的Bootice新建SYSLINUX引导程序?
  5. 递归->记忆化搜索->严格表
  6. 朝着理想坚实迈进_坚实原则:单一责任原则
  7. leetcode-Single Number II-137
  8. C语言-基础入门-学习笔记(13):结构体
  9. Vue2 + ant design vue1.7.8版本 Table组件 手动拖拽、可伸缩列功能
  10. 【数字】求特定三位数
  11. 网易云音乐的歌单推荐算法是怎样的?
  12. java基础十一---Socket
  13. Spring 工作原理
  14. CmakeList中加入OpenCV编译项
  15. 多张图片转成PDF文件
  16. 失传千年AE特效真经(一)
  17. 教程03-微擎的数据库数据字典
  18. JAVA基础数据类型转化
  19. Guitar Pro8中文版打谱软件新功能介绍
  20. 初学小程序之制作电影介绍查询小程序遇到的问题和解决办法

热门文章

  1. AWS的十条军规: 过去十年的经验总结
  2. c语言中gets与puts,请教puts和gets函数
  3. mysql-高级命令(1)和一些函数(悟已往之不谏,知来者之可追)
  4. 分析学中的若干空间:
  5. 听说今年金三银四变成金一银二了。。
  6. 发布项目,Upload AppStore解决ITMS-90096问题
  7. micropython 固件编译关于 spi psram opi qspi 的设置
  8. 个人QQ号码推广代码
  9. PHP学习之字符串操作
  10. 多目标优化系列(六)SPEA