git rebase使用场景
1. 当前分支落后拉取后,整理commit,使得提交历史为直线
git pull = git fetch + git merge
git pull --rebase = git fetch + git rebase
其实--rebase的目的只有两个:
1.让多个人在同一个分支开发的提交节点形成一条线,而不是多条线
2.让你提交的commit在该分支的最前面
当push被reject的时候,可以用 git pull --rebase 拉取内容,将提交记录保持一条直线
git pull --rebase时候,不能有modified状态的文件,可以有Untracked files。modified状态的文件,可以commit或者stash一下,通常的操作有:
$ git stash
$ git pull --rebase
$ git push
$ git stash pop
2. 别的分支合并到master,先整理为直线,再合并
1. 开辟特性分支 git checkbox -b feature
2. 在feature分支提交commit
3. 在feature git reabse -i 合并多个commit为一个,简化提交历史。这样可以在git rebase时候减少冲突解决次数。
4. 在feature git pull origin master --rebase (相当于git fetch origin master, git rebase origin/master)
将master最新commit同步到此分支,可能要手动解决冲突(合并过程中,异常退出vi窗口,
用git rebase --edit-todo恢复,修改完,git rebase --continue 继续下一步,
忽略,git rebase --skip,终止,用git rebase —abort)
5. 切回master,git merge feature 将feature分支内容合并到master
6. git push提交master
如此,master的提交历史将是一条直线。
3. 分支的多个连续commit复制到其他分支
git rebase [startpoint] [endpoint] --onto [branchName] //将多个连续commit添加到目标分支branchName, [startpoint] [endpoint]指定的是一个 前开后闭的区间
例如:
git rebase 90bc0045b^ 5de0da9f2 --onto master //90bc0045b^后退一个commit,做成一个[90bc0045b, 5de0da9f2]闭区间
rebase完后,需要
git reset --hard commitId //将分支的HEAD指向提交的id
4. commit合并
git rebase -i [startpoint] [endpoint] //[endpoint]可省略,将多个commit合并为一个,使用squash模式
例如:
git rebase -i HEAD~3 //往前3个commit,到现在,进行合并
5. commit拆分
git rebase -i 对指定commit的pick改为edit,进行编辑拆分
6. commit排序
git rebase -i 修改列表中commit顺序即可
7. 改变分支起点
git checkout feature2
git rebase master
可以将feature2起点从别的分支改到master分支上
注意点:
主分支上不能rebase,如果如此,主分支的历史将被篡改,不能看到原始的历史记录了
git pull时可以加上--rebase参数, 使之不产生Merge点, 保证了代码的整洁,每次加rebase参数有点麻烦,
给指定分支设置为rebase方式,可以使用如下方式:
$ git config branch.dev.rebase true
使用时将 "dev" 修改成您自己本地的分支名字,必须cd到工程目录下,才能更改分支配置
所有的分支都应该用rebase
$ git config --global branch.autosetuprebase always
这样新建的分支会设置为rebase,已经建好的还需单独设置
参考:
https://baijiahao.baidu.com/s?id=1633418495146592435&wfr=spider&for=pc
https://www.liaoxuefeng.com/wiki/896043488029600/1216289527823648
https://blog.csdn.net/nrsc272420199/article/details/85555911
https://www.codercto.com/a/45325.html
git rebase使用场景的更多相关文章
- 分享几个 git 的使用场景
你真的会使用 git 吗?你能回答下面几个问题吗? 有三个commit(顺序:CommitA.CommitB.CommitC),它们相互独立,没有依赖. 在不修改B.C的前提下,修改A,怎么操作? 合 ...
- git rebase 还是 merge的使用场景最通俗的解释
什么是 rebase? git rebase 你其实可以把它理解成是“重新设置基线”,将你的当前分支重新设置开始点.这个时候才能知道你当前分支于你需要比较的分支之间的差异. 原理很简单:rebase需 ...
- 妙用git rebase --onto指令
有时候,在分支提交更改的时候,会忘记rebase,就直接提交上去,或者忘记和本地远程分支做merge,就直接rebase了别的分支.有时候真希望有一种切片的方式,让自己的分支只需要接上某一段.这个时候 ...
- git merge 与 git rebase
git merge git rebase merge V.S. rebase 参考材料 写在开始: 对merge和rebase的用法总有疑惑,好像两个都能完成"获取别的branch的comm ...
- git rebase 合并多次提交.
一.应用场景 为什么需要合并多个提交呢? 常常一个功能的开发,修修补补 commit 了 n 多次,带来的结果就是提交过多过杂,不够直观,究竟哪些提交是对应这个功能的呢?还有就是,如果我要将这个功能迁 ...
- git merge和git rebase的区别(转)
Description git rebase 和 git merge 一样都是用于从一个分支获取并且合并到当前分支,但是他们采取不同的工作方式,以下面的一个工作场景说明其区别 场景: 如图所示: ...
- git revert .vs. git reset .vs. git rebase
1. git rervert的工作方式是:将一个老的commit的改动完全找出来,并且在新的tip处运行反操作,最终清除老commit的改动: git revert的应用场景多在对public rep ...
- git rebase vs git merge详解
https://medium.com/@porteneuve/getting-solid-at-git-rebase-vs-merge-4fa1a48c53aa#.std3ddz0g 请参考另外一篇文 ...
- git rebase VS git merge? 更优雅的 git 合并方式值得拥有
写在前面 如果你不能很好的应用 Git,那么这里为你提供一个非常棒的 Git 在线练习工具 Git Online ,你可以更直观的看到你所使用的命令会产生什么效果 另外,你在使用 Git 合并分支时只 ...
随机推荐
- MinGW-w64离线安装
1.下载 如果你能从在线 安装,那最好就在线安装吧. 如果你能连上官网,那可以选择从官网去下载,地址:https://osdn.net/projects/mingw/releases/ https:/ ...
- 开发基础之牛逼哄哄的 Lambda 表达式,简洁优雅就是生产力
什么是Lambda? 我们知道,对于一个Java变量,我们可以赋给其一个“值”. 如果你想把“一块代码”赋给一个Java变量,应该怎么做呢? 比如,我想把右边那块代码,赋给一个叫做aBlockOfCo ...
- ArcGIS Server 注册托管数据库
需要已经安装好ArcGIS for Desktop.ArcGIS for Server和ArcSDE,并且已经创建了地理数据库 我试了用管理网站添加,总是不成功,后来用ArcCatalog添加成功.这 ...
- springBoot 日志中关于profiles设置的源码解读
在启动SpringBoot应用是看到到如下日志,于是出于好奇查看了下源代码: 首先,StartpInfoLogger类,采用jcl-over-slf4j[即Apache Common Log]中的Lo ...
- javascript:location=location;">刷新</a>
<a href="javascript:location=location;">刷新</a>
- spark——故障排除
故障排除一:控制reduce端缓冲大小以避免OOM 在Shuffle过程,reduce端task并不是等到map端task将其数据全部写入磁盘后再去拉取,而是map端写一点数据,reduce端task ...
- (知识点4)C++ 中vector
1.定义vector<vector<int>> M; 2.添加元素这里是vector的嵌套使用,本质是vector元素里的每个元素也是vector类型,所以抓住本质来添加元素就 ...
- LeetCode 953. Verifying an Alien Dictionary
原题链接在这里:https://leetcode.com/problems/verifying-an-alien-dictionary/ 题目: In an alien language, surpr ...
- UFUN函数 UF_ASSEM UF_PART函数(UF_ASSEM_ask_work_part,UF_PART_ask_part_name)
UF_initialize(); tag_t work_part_tag=NULL_TAG; ]=""; //获取当前工作部件的tag work_part_tag=UF_ASSEM ...
- MVC框架与增强
一.什么是MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示 ...