妙用git rebase --onto指令
有时候,在分支提交更改的时候,会忘记rebase,就直接提交上去,或者忘记和本地远程分支做merge,就直接rebase了别的分支。有时候真希望有一种切片的方式,让自己的分支只需要接上某一段。这个时候你可以使用git中的rebase --onto了。
假设场景 B----C A,现在想将B-C之间的切片(注意边界的B和C,后文会讲到)放到A之上。
假设git rebase --onto A B C,这个demo.A代表的是你实际想要将切片放到哪的分支,B代表切片开始分支(一定要特别注意B的开闭问题,这里rebase --onto的机制是左开右闭)也就是说,如果你真的想要B的这一个节点切片,你应该从B之前的一个分支开始,这个时候git又为我们准备好了,即B~1或者B^,两者都代表回到B之前的一个节点。C代表的是切片的末尾,此时是闭,也就是说C的当前节点也会被带到A之上。
很多同学看到这里会说,原来这么简单,我会了! 其实,你们还忽略了一个很严重的问题,即A,B,C哪个分支才是我之后真正的活动分支。即我完成切片操作之后,A的历史是在切片之上了吗?
我要告诉你的是,A的历史压根就没有改变。 同学会问:什么!?那我做切片干吗,我就想在A之上放上我的切片历史啊! 其实这个时候有一个细节就特别要注意,那就是真正的活动分支是C,也就是说如果你想保留A和C的历史,你就需要在切片的末尾先建立一个分支temp,这样我调用命令 git rebase --onto A B~1 temp,也就是说我把B到C之间的历史加到了A之上,并且当前temp分支的历史状态就是我想要的。这样,你才真正完成了git rebase --onto这个命令。
除了以上的使用场景之外,还有一个用法比较经典。假设你有一段很长的历史比如A-1-2-3-4-5-6-7-8-B.
这个时候你忽然发现在1的地方,有一处改错了,但你又不想git reset B~8,进行修改之后再一个一个重写提交信息。这个时候你就可以用git rebase --onto了。 其实很简单,假设我们在1这个节点有个错误,首先,我在1切一个分支temp,切过去之后做更改,更改完之后我用git commit --amend,即重写本次提交历史的。提交之后,我1的提交信息没有改变,但文件已经被我改变了,好,接下来要做的就是把原来1之后的到B的历史,加到新的1之上。因为我们通过tig或者gitk可以看到,此时的1和新1完全走的是两条分支状态,所以自然而然的我们会想到去这么做。
这个时候就可以用我们的git rebase --onto了, 首先在切片末尾,即B上建立一个活动分支result,然后调用命令git rebase --onto 新1 1 result,注意里面开闭区间的问题,因为我此时已经有1的历史,所以我应该从1的下一个开始,但又因为是左开又闭,所以我这里就直接写1就没问题。这样就完成了回退历史做修改,并且可以不用重新写提交信息的操作,很酷炫吧!
希望这篇文章可以给你在使用git的时候给你帮助,同时留下你的脚印,这也是对我最大的支持,谢谢。
转载于:https://www.cnblogs.com/rickyk/p/3848768.html
妙用git rebase --onto指令相关推荐
- git 强制更新远程_版本控制管理工具git的常见指令合集
今天小千就来给大家介绍一下git中比较常见的指令合集,方便大家使用git,建议收藏起来方便日后查阅. 一.常见的命令 git help <command> # 显示command的help ...
- 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小技巧 - 指令别名及使用Beyond Compare作为差异比较工具
前言 本文主要写给使用命令行来操作Git的用户,用于提高Git使用的效率.至于使用命令还是GUI(Tortoise Git或VS的Git插件)就不在此讨论了,大家根据自己的的喜好选择就好.我个人是比较 ...
- git rebase 变基
概念 变基(Rebase)也是合代码的一种手段. 变基与合并(Merge)不同的是,他可以修改历史,使用rebase来代替merge合代码的话,得到的历史记录是一条直线提交历史,无分叉,很漂亮. 然而 ...
- git 相关文件指令随笔
1.若commit 且push后,发现文件存在问题,可如下操作: (1)本地修改对应文件至OK,然后, git add filename git commit --amend git push ... ...
- git 代码没了,git rebase 合并提交记录,git stash
xx 问题 git合并提交记录 创建提交记录 合并提交记录 rebase有冲突 合并后的本地路径提交到远程 其中的参数 pick 改变提交 5.txt 和 4.txt 的顺序 删除某一个提交 rewo ...
- git rebase 的几种用法
演示过程中,为便于区分修改结果,未使用commit 版本号,建议各位使用尽量以版本号为准 1.修改历史提交信息 例如:将提交历史 修改提交1改为 develop 修改提交1 修改步骤: 查看 git的 ...
- [Git] Git整理(四) git rebase 的使用
概述 在之前总结分支相关内容时说道,合并两个分支的提交可以使用git merge,然而除了这种方式之外,还有一种方式就是使用git rebase,这两种方式的最终结果都相同,但是合并历史却不同:git ...
- 常用的Git命令行指令以及图形化界面的简单操作
命令行操作 常用指令 指令 作用 指令 作用 cd 打开目录 pwd 绝对路径 ls 列出清单 mkdir 新建目录 cp 拷贝 mv 移动 rm 移除 touch 创建文档 一.git版本管理的指令 ...
- 你在开发过程中使用Git Rebase还是Git Merge?
1. 痛苦吗?代码历史中的迷失羔羊 我们先来看一个真实的代码提交历史图形化截图: 图片源自 https://storage.kraken.io/kk8yWPxzXVfBD3654oMN/c8b97f4 ...
最新文章
- php 去掉img,php如何删除img标签
- 施一公:世界如此未知,还有什么物事必须难以释怀?
- 信号系统的一些基本概念
- Guava 2.2-新集合类型
- PHP中使用CURL实现Get和Post请求方法
- 力扣459. 重复的子字符串(KMP,JavaScript)
- **【校招速递】入职鹅厂,算法大赛优秀选手开启职场新生活**
- 深度学习基础系列(十)| Global Average Pooling是否可以替代全连接层?
- 一键关闭 openwrt路由器的led灯
- navicat 绿化版
- html video添加字幕,HTML5标签:video元素的使用方法及作用
- 2012年信息系统项目管理师下半年上午考试习题与答案解析
- 电脑开机黑屏---只有一个鼠标箭头处理办法
- 全球值得关注的11家人脸识别公司与机构
- Android音视频全面介绍与代码实践之音效(四)
- 迈入发展期的信创,更需夯实基础
- 台式计算机的安装顺序,台式电脑安装系统步骤图 装系统步骤详解
- html中的colspan是什么意思
- android 双屏壁纸,高清全面屏双屏壁纸
- 季节性ARIMA:时间序列预测