git rebase的用法
改变基
一个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的用法的更多相关文章
- Git merge && git rebase的用法
Git merge的用法: git merge Dev // Dev表示某分支,表示在当前分支合并Dev分支 git merge -m “Merge from Dev” Dev //-m可以加上m ...
- git命令之git rebase 的用法
rebase 假设你现在基于远程分支"origin",创建一个叫"mywork"的分支. $ git checkout -b mywork origin 现在我 ...
- Git merge 与 git rebase的区别
Git merge的用法: git merge Dev // Dev表示某分支,表示在当前分支合并Dev分支 git merge -m "Merge from Dev" Dev ...
- 使用git Rebase让历史变得清晰
当多人协作开发一个分支时,历史记录通常如下方左图所示,比较凌乱.如果希望能像右图那样呈线性提交,就需要学习git rebase的用法. “Merge branch”提交的产生 我们的工作流程是:修改代 ...
- 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% ...
- 记录git rebase用法
git 是基于文件系统的版本管理工具,文档和详细介绍可以查看git 一.git commit --amend 如果你对文件做了修改需要和上一次的修改合并为一个change git add . git ...
- [译]git rebase -i
使用rebase -i会在终端出现一个交互页面. 在这个交互页面中我们可以对要rebase的commit做一定的修改. 用法 git rebase -i <master> 把当前的分支的c ...
- [译]git rebase
rebase就是重新定义你分支的起点, 分支上的commit将生成对应的新的commit并放在你指定的新的起点commit后, 分支上的老commit将被删除. rebase就是将你的分支从一个com ...
- 妙用git rebase --onto指令
有时候,在分支提交更改的时候,会忘记rebase,就直接提交上去,或者忘记和本地远程分支做merge,就直接rebase了别的分支.有时候真希望有一种切片的方式,让自己的分支只需要接上某一段.这个时候 ...
随机推荐
- AI学习---数据读取&神经网络
AI学习---数据读取&神经网络 fa
- ELK-logstash-6.3.2-常用配置
1. input-file收集日志信息 [yun@mini04 config]$ pwd /app/logstash/config [yun@mini04 config]$ cat file.conf ...
- node.js cluster模式启用方式
众所周知,Node.js运行在Chrome的JavaScript运行时平台上,我们把该平台优雅地称之为V8引擎.不论是V8引擎,还是之后的Node.js,都是以单线程的方式运行的,因此,在多核心处理器 ...
- LeetCode算法题-Ugly Number(Java实现-四种解法)
这是悦乐书的第199次更新,第208篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第64题(顺位题号是263).编写一个程序来检查给定的数字是否是一个丑陋的数字.丑陋的数 ...
- February 16th, 2018 Week 7th Friday
Full of luck, health and cheer. We wish you a Happy Chinese New Year! 春节快乐,万事如意! From Shanbay. Today ...
- Teradata全面转型
大数据时代 Teradata全面转型 [关键点]:数据分析相关技术和方案==>帮助企业实现数据价值变现 1.所有企业达成共识 数据已经成为企业的资产,甚至是核心资产. 2.Teradata转型 ...
- java.util.concurrent包学习笔记(一)Executor框架
类图: 其实从类图我们能发现concurrent包(除去java.util.concurrent.atomic 和 java.util.concurrent.locks)中的内容并没有特别多,大概分为 ...
- 【vue】vue中实现导出excel
1.安装依赖 cnpm install -S file-saver xlsx cnpm install -D script-loader 2.例如在src文件夹中新建一个名为vendor(vendor ...
- CDB与PDB之间的切换方法
Oracle 12c 开始支持 PLUGGABLE DATABASE,并且提供了一个方法在CDB和PDB之间切换. 1. 使用 show pdbs 可以确认当前有哪些PDB? SQL> show ...
- 腾讯app自动化测试读后感
1.播放器播放视频,如何验证视频播放成功? 1.1播放时间>=0,获取Video标签里的current time判断. 1.2有播放画面,截屏获取. 框架自带的截图功能, 1.3有播放声音,获取 ...