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 合并分支时只 ...
随机推荐
- OSI七层模型数据流
前段时间去学习了思科网络基础CCNA的知识,与我们运维所需的网络基础大同小异,当然其包容性要大很多.我们主要来看下网络方面的内容: 网络七层模型 七层网络模型是我们进行网络间通信的基本理论依据,由上至 ...
- Beta冲刺(5/7)——2019.5.26
所属课程 软件工程1916|W(福州大学) 作业要求 Beta冲刺(5/7)--2019.5.26 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪万里 ...
- position 的absolute会使display变成inline-block
position:absolute和float会隐式地改变display类型,不论之前什么类型的元素(display:none除外), 只要设置了position:absolute. float中任意 ...
- 这是一份非常适合收藏的Android进阶/面试重难点整理
写在前面 记得我大二时“不务正业”地自学Android并跟了老师做项目,到大三开始在目前的公司实习,至今毕业已有几年多,学习Android已经6.7年多了!但总感觉知识点很零散,并且不够深入,遇到瓶颈 ...
- 远程连接MySQL提示“Host is not allowed to connected to this MySQL server”
如果你想连接你的mysql的时候发生这个错误: ERROR 1130: Host '192.168.1.3' is not allowed to connect to this MySQL serve ...
- abp记录1
1在AbpWebApplication中的的构造函数中创建abpBootstrapper 实例,在Application_Start执行AbpBootstrapper值初始化方式 2AbpBootst ...
- 32、MySQL简介
一.MySQL简介 1.数据库管理软件分类 主要分为关系型和非关系型. 可以简单的理解为,关系型数据库需要有表结构,非关系型数据库是key-value存储的,没有表结构. 关系型:如sqllite,d ...
- windows10家庭版升级专业版/企业版
以防万一,还是把Windows10家庭版的密钥保存下来. 一.保留原密钥 1. Win+R,输入regedit 2. 进入目录 HKEY_LOCAL_MACHINE\SOFTWARE\Microsof ...
- 关于System.TypeInitializationException异常
什么是System.TypeInitializationException 作为类初始值设定项引发的异常的包装器而引发的异常. 继承 Object Exception SystemException ...
- ent 基本使用四 图遍历查询
接上文,我们已经创建了基本的关系以及表实体,以下是通过图方式的查询 参考关系图 代码处理 创建图数据 func CreateGraph(ctx context.Context, client *ent ...