git rebase,顾名思义,就是重新定义(re)起点(base)的作用,即重新定义分支的版本库状态。要搞清楚这个东西,要先看看版本库状态切换的两种情况:
1. 我们知道,在某个分支上,我们可以通过git reset,实现将当前分支切换到本分支以前的任何一个版本状态,即所谓的“回溯”。即实现了本分支的“后悔药”。也即版本控制系统的初衷。
2. 还有另一种情况,当我们的项目有多个分支的时候。我们除了在本地开发的时候可能会“回溯”外,也常常会将和自己并行开发的别人的分支修改添加到自 己本地来。这种情况下很常见。作为项目管理员,肯定会不断的合并各个子项目的补丁,并将最新版本推送到公共版本库,而作为开发人员之一,提交自己的补丁之 后,往往需要将自己的工作更新到最新的版本库,也就是说把别的分支的工作包含进来。
举个例子来说吧!假设我们的项目初期只有一个master分支,然后分支上作过两次提交。这个时候系统只有一个master分支,他的分支历史如下:
master0(初始化后的版本)
||
v
master1(第一次提交后的版本)
||
v
master2(第二次提交后的版本)
这个时候,我们可以通过git reset将master分支(工作目录、工作缓存或者是版本库)切换到master1或者master0版本,这就是前面所说的第一种情况。
假设我们这里把master分支通过git reset回溯到了master1状态。那么这个时候系统仍然只有一个master分支,分支的历史如下:
master0(初始化后的版本)
||
v
master1(第一次提交后的版本)
然后,我们在这里以master1为起点,创建了另一个分支test。那么对于test分支来说,他的第一个版本test0就和master1是同一个版本,此时项目的分支历史如下:
master0(初始化后的版本)
||
v
master1(第一次提交后的版本)===test0(test分支,初始化自master分支master1状态)
这个时候,我们分别对master分支、test分支作两次提交,此时版本库应该成了这个样子:
master0(初始化后的版本)
||
v
master1===test0==>test1===>test2
||
v
master2===>master3
1. 这个时候,通过第一种git reset的方式,可以将master分支的当前状态(master3)回溯到master分支的master0、master1、master2状态。 也可已将test分支当前状态(test2)回溯到test分支的test0、test1状态,以及test分支的父分支master的master0、 master1状态。
2. 那么。如果我要让test分支从test0到test2之间所有的改变都添加到master分支来,使得master分支包含test分支的所有修改。这个时候就要用到git rebase了。
首先,我们切换到master分支,然后运行下面的命令,即可实现我们的要求:
1
git rebase test
这个时候,git做了些什么呢?
1. 先将test分支的代码checkout出来,作为工作目录
2. 然后将master分支从test分支创建起的所有改变的补丁,依次打上。如果打补丁的过程没问题,rebase就搞定了
3. 如果打补丁的时候出现了问题,就会提示你处理冲突。处理好了,可以运行git rebase –continue继续直到完成
4. 如果你不想处理,你还是有两个选择,一个是放弃rebase过程(运行git rebase –abort),另一个是直接用test分支的取代当前分支的(git rebase –skip)。
此外,rebase还能够让你修订以前提交,这个功能日后再说。
分享到:
相关推荐
微信小程序学习用demo:git-book(源代码+截图)微信小程序学习用demo:git-book(源代码+截图)微信小程序学习用demo:git-book(源代码+截图)微信小程序学习用demo:git-book(源代码+截图)微信小程序学习用demo:git-...
git init xxxx的时候报错: fatal: git 1.7.2 or later required 或许是git版本太低,你可以自己编译最新git源码进行安装。
通过此实验室/游乐场学习“ git rebase -i” 是否想学习如何正确使用git rebase -i (也称为交互式rebase)而又不会使您的生产仓库面临风险? 您来对地方了! 此仓库中包含的脚本将创建一个git仓库(带有2个克隆副本...
Git具有以下主要功能和特点: 版本控制:Git最基本的功能是版本控制,可以记录每个文件的修改历史,包括修改内容、作者、时间等。通过Git,开发者可以轻松回溯到任何一个历史版本,查看修改细节、恢复代码等,有助...
merge主要发生在这样几个地方1 两个人同时开发一个分支,在拉取对方代码的时候2 要将代码合并到master的时候git pull origin master
Git Rebase(Visual Studio代码扩展) 使用键盘快捷键可以快速编辑交互式Git基准库的操作。 如何使用 按下与您所需的git rebase操作相对应的键。 此命令将应用于所有选定的行。 键盘快捷键: p将命令设置为“ ...
前端大厂最新面试题-git rebase_ git merge.docx
主要介绍了详解git merge 与 git rebase的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
git-gateway-托管git API的网关基于角色的通用Git Hosting提供程序的API的安全访问。 使用JAMstack方法构建站点时,一种常见的模式是将所有内容作为结构化数据存储在Git存储库中,而不是依赖于外部数据库。 Netlify ...
可视化Git管理工具:GitKraken 6.5.1 官方免费版,EXE文件。这个版本还是免费的,只要禁用自动升级,即可保持免费状态。具体方法给两个参考网址吧: 1、https://blog.csdn.net/yuanmomoya/article/details/104746803...
Rebase-editor, 一个专门用于Git交互式rebase的简单CLI应用
gitpractise_ex:用于Git Rebase和合并的仓库
在本地初始化一个Git仓库:git init 从远程仓库克隆 :git clone [url] 本地仓库命令: git status:查看文件状态 git add [文件名]:将文件的修改加入暂存区 git reset [文件名]:将暂存区的文件取消暂存,或者切换...
详解Git分支操作细节,Gitlab账户注册,Gitlab的SSH配置,Git操作远程仓库
1:git init 进入到上传的文件的目录下,使用命令初始化本地仓库git init 2:git add . 把本地文件添加到本地仓库暂存区,.的意思是把当前目录下所有的文件及子目录都添加管理,也可以把.换成相应的文件名 ...
★ 熟悉 Linux 命令常用命令,Git版本管理工具 Linux 常有命令 ps、top、netstat、cat、tail、kill 查看进程命令:ps 查看cpu占用命令:top 查看端口占用:netstat 查看文本(日志):cat、tail 杀死进程:kill Git ...
主要介绍了git rebase -i 修改历史提交的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
pacman:git:git.archlinux.orgpacman.git的个人克隆
git的实战操作,在上面使用git。详细教程使用!
主要介绍了git rebase 成功之后如何撤销,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下