改变基

    

  一个git库,开发人员在master分支的Bcommit的时候,创建了一个dev分支,此时Bcommit是dev分支的基,然后分别进行两个分支的开发。

  进行到master提交了Dcommit,而dev分支提交到了Zcommit,如果此时需要将dev分支的基切换为D,那么可以用下面这个命令:

git checkout dev  #切换到dev分支
git rebase master #将master最新的commit作为基

  执行这个命令时,可能会有分支冲突,解决冲突之后,进行如下操作:

# 解决冲突
git add xxx
git rebase --continue

  进行完这些操作后,分支的情况就如下图了:

  

  使用git log来查看提交日志,可以看到dev分支的x、y、z的提交次序变到了maste分支的Dcommit后面。

  也就是说,这里进行了一个git merge。

  拓展:如果要将下面的test分支基变为master分支的D,那么可以使用git rebase --onto master dev^ test

   

合并提交记录

  首先看下面这个例子:

[root@centos demo]# git init
Initialized empty Git repository in /root/demo/.git/
[root@centos demo]# echo one >> a.txt
[root@centos demo]# git add a.txt
[root@centos demo]# git commit -m "first commit"
[master (root-commit) b7ee3a2] first commit
1 file changed, 1 insertion(+)
create mode 100644 a.txt
[root@centos demo]# echo two >> a.txt
[root@centos demo]# git commit -am "second commit"
[master 92ae9c4] second commit
1 file changed, 1 insertion(+)
[root@centos demo]# echo three >> a.txt
[root@centos demo]# git commit -am "third commit"
[master 0985eec] third commit
1 file changed, 1 insertion(+)
[root@centos demo]# echo four >> a.txt
[root@centos demo]# git commit -am "four commit"
[master 5bd480c] four commit
1 file changed, 1 insertion(+)
[root@centos demo]# git show-branch --more=4 #查看四次提交记录
[master] four commit
[master^] third commit
[master~2] second commit
[master~3] first commit

  上面代码进行了4次提交,但是现在有个需求,将这四次提交的合并为一个提交,提交信息整合一下,改成"four commit"

  可以这么做:

[root@centos demo]# git rebase -i master~3

#会启动vi编辑器,顶部显示的内容如下:
pick 92ae9c4 second commit
pick 0985eec third commit
pick 5bd480c four commit

  然后将上面这三行中,后面两行的pick替换为squash,即下面这个样子:

pick 92ae9c4 second commit
#将后面两次的pick改成squash,然后保存退出
squash 0985eec third commit
squash 5bd480c four commit

  保存退出后,又会打开一个vim编辑器窗口,内容如下:

# This is a combination of 3 commits.
# This is the 1st commit message: second commit # This is the commit message #2: third commit # This is the commit message #3: four commit

  从上面三个commit信息,就是会显示在合并后的那个commit提交信息,如果原封不动的话,那么三次提交合并为一个提交之后,这一个提交就会有三行提交comment。

  当然,可以使用#来注释其中的某几条comment,或者修改其中的comment,都行。

  比如我只想保留最后一次提交comment,那么可以向下面这么做:

# This is a combination of 3 commits.
# This is the 1st commit message: #second commit # This is the commit message #2: #third commit # This is the commit message #3: four commit

  然后保存并退出,不出意外的话,现在已经合并提交成功了。

  可以查看一下提交记录:

[root@centos demo]# git show-branch --more=4
[master] four commit
[master^] first commit

  同时,文件的内容也没有发生改变:

[root@centos demo]# cat a.txt
one
two
three
four

  

git rebase的用法的更多相关文章

  1. Git merge && git rebase的用法

    Git merge的用法: git merge Dev // Dev表示某分支,表示在当前分支合并Dev分支 git merge -m  “Merge from Dev”  Dev //-m可以加上m ...

  2. git命令之git rebase 的用法

    rebase 假设你现在基于远程分支"origin",创建一个叫"mywork"的分支. $ git checkout -b mywork origin 现在我 ...

  3. Git merge 与 git rebase的区别

    Git merge的用法: git merge Dev // Dev表示某分支,表示在当前分支合并Dev分支 git merge -m  "Merge from Dev"  Dev ...

  4. 使用git Rebase让历史变得清晰

    当多人协作开发一个分支时,历史记录通常如下方左图所示,比较凌乱.如果希望能像右图那样呈线性提交,就需要学习git rebase的用法. “Merge branch”提交的产生 我们的工作流程是:修改代 ...

  5. git rebase和git merge的用法

    http://softlab.sdut.edu.cn/blog/subaochen/2016/01/git-rebase%E5%92%8Cgit-merge%E7%9A%84%E7%94%A8%E6% ...

  6. 记录git rebase用法

    git 是基于文件系统的版本管理工具,文档和详细介绍可以查看git 一.git commit --amend 如果你对文件做了修改需要和上一次的修改合并为一个change git add . git ...

  7. [译]git rebase -i

    使用rebase -i会在终端出现一个交互页面. 在这个交互页面中我们可以对要rebase的commit做一定的修改. 用法 git rebase -i <master> 把当前的分支的c ...

  8. [译]git rebase

    rebase就是重新定义你分支的起点, 分支上的commit将生成对应的新的commit并放在你指定的新的起点commit后, 分支上的老commit将被删除. rebase就是将你的分支从一个com ...

  9. 妙用git rebase --onto指令

    有时候,在分支提交更改的时候,会忘记rebase,就直接提交上去,或者忘记和本地远程分支做merge,就直接rebase了别的分支.有时候真希望有一种切片的方式,让自己的分支只需要接上某一段.这个时候 ...

随机推荐

  1. 二、selenium 安装

    selenium的安装所需要的环境: 1.浏览器的安装Firefox 2.JDK的安装(Java开发基础类库)eclipse 一个开发源代码的工具 3.selenium sever 下载.网络状况监视 ...

  2. echo 在shell及脚本中显示色彩及闪烁警告效果

    在shell脚本编写中,echo用于输出字符串等提示信息,当我们需要格外显示色彩及闪烁效果如下: 一.在执行shell中显示色彩: 语法格式: echo -e "\033[颜色1:颜色2m ...

  3. spring拦截器(interceptor)简介

    1. 拦截器用途 (1)拦截未登录用户直接访问某些链接 (2)拦截日志信息 (3)拦截非法攻击,比如sql注入 2. 涉及jar.类 (1)spring-webmvc.jar (2)HandlerIn ...

  4. Java循环语句怎么用?经典排序算法见真知

    Java中循环语句的使用,莫过于在排序算法中使用得最为经典. 排序算法非常的多,不过大体可以分为两种: 一种是比较排序,主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等. 另一种是非 ...

  5. Unity Shader 基础(1): RenderType & ReplacementShader

    很多Shader中都会定义RenderType这个类型,但是一直搞不明白到底是干嘛的,官方文档是这样结解释的:Rendering with Replaced Shaders Rendering wit ...

  6. js FormData方法介绍

    1. 概述 FormData类型其实是在XMLHttpRequest 2级定义的,它是为序列化表以及创建与表单格式相同的数据(当然是用于XHR传输)提供便利. 2. 构造函数 创建一个formData ...

  7. JavaScript显示文本框后自动获取焦点

    废话少说,见官方文档: 他的用法是:document.getElementById('username').focus();                   这样写在display:block;显 ...

  8. TCP三次握手四次挥手过程详解

    http://blog.csdn.net/imilli/article/details/50620104 TCP头部: 其中 ACK   SYN  序号  这三个部分在以下会用到,它们的介绍也在下面. ...

  9. 缓存数据库Memcache

    为什么用缓存数据库 MySQL:将数据存储在磁盘上,数据写入读取相对较慢 Memcached:将数据存在内存中的数据库,数据读写都快,但是数据容易丢失 数据存储,数据仓库选择MySQL这种磁盘的数据库 ...

  10. 在新建的python3环境下运行jupyter失败的原因

    在deeplearning中再运行jupyter notebook就出现了错误: (deeplearning) userdeMBP:~ user$ jupyter notebook -bash: ju ...