git rebase,顾名思义,就是重新定义(re)起点(base)的作用,即重新定义分支的版本库状态。要搞清楚这个东西,要先看看版本库状态切换的两种情况:
- 我们知道,在某个分支上,我们可以通过git reset,实现将当前分支切换到本分支以前的任何一个版本状态,即所谓的“回溯”。即实现了本分支的“后悔药”。也即版本控制系统的初衷。
- 还有另一种情况,当我们的项目有多个分支的时候。我们除了在本地开发的时候可能会“回溯”外,也常常会将和自己并行开发的别人的分支修改添加到自己本地来。这种情况下很常见。作为项目管理员,肯定会不断的合并各个子项目的补丁,并将最新版本推送到公共版本库,而作为开发人员之一,提交自己的补丁之后,往往需要将自己的工作更新到最新的版本库,也就是说把别的分支的工作包含进来。
举个例子来说吧!假设我们的项目初期只有一个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
- 这个时候,通过第一种git reset的方式,可以将master分支的当前状态(master3)回溯到master分支的master0、master1、master2状态。也可已将test分支当前状态(test2)回溯到test分支的test0、test1状态,以及test分支的父分支master的master0、 master1状态。
- 那么。如果我要让test分支从test0到test2之间所有的改变都添加到master分支来,使得master分支包含test分支的所有修改。这个时候就要用到git rebase了。
首先,我们切换到master分支,然后运行下面的命令,即可实现我们的要求:
1 |
git rebase test
|
这个时候,git做了些什么呢?
- 先将test分支的代码checkout出来,作为工作目录
- 然后将master分支从test分支创建起的所有改变的补丁,依次打上。如果打补丁的过程没问题,rebase就搞定了
- 如果打补丁的时候出现了问题,就会提示你处理冲突。处理好了,可以运行git rebase –continue继续直到完成
- 如果你不想处理,你还是有两个选择,一个是放弃rebase过程(运行git rebase –abort),另一个是直接用test分支的取代当前分支的(git rebase –skip)。
相关推荐
git-rebase-reword git-rebase-reword是一个简单的git命令,以与修改相同的方式来更改一个提交(最后一个或更旧的提交) 文献资料 它是基于对rebase交互操作的名称来命名的,以补充提交“ reword”。 参见和 -...
*“git rebase --rebase-merges”取代旧的“--preserve-merges” 选项; 后者现在标记为已弃用。 *使用--recurse-submodules进行克隆时给出的错误消息 已更新。 *完成帮助程序代码现在关注存储库本地 配置...
git状态 一个简单的二进制和Rust库,用于探查git存储库的状态。 对于shell提示很有用。 这在纯Rust中重新实现 。 它没有任何令人讨厌的编译或运行时git2依赖项。 git命令行界面不提供此功能。 状态 返回以下任何...
*更新“git rebase”的支持部分以删除应该的代码 不再使用。 *开发人员支持,以模拟测试中未满足的先决条件 确保测试时其余测试仍然成功 已跳过先决条件。 *“git update-server-info”学会了不用#重写文件...
git的实战操作,在上面使用git。详细教程使用!
欢迎使用Git GIT对象模型 Git目录 与 工作目录 Git索引 2. 第一步 安装Git 安装与初始化 3. 基本用法 获得一个Git仓库 正常的工作流程 分支与合并@基础 查看历史 -Git日志 比较提交 - Git Diff 分布式的工作...
建议在此网站上进行开发的方法是使用Docker。 有关更多详细信息,请参见 。 开发流程 做出令人敬畏的改变。 将更改添加到Git临时区域: git add <changed> 。 提交您的更改: git commit -m "Some message better ...
点文件 我的点文件。 点文件 吉特 屏幕 多路复用器 维姆 Zsh 包裹 用法 ...git clone https://github.com/ymyzk/dotfiles.git ....git pull --rebase ./install.sh dotfiles.txt 新维姆 $ pip3 install --user neovim
如果您必须执行git push --force或git rebase ,请谨慎或来 Jake。 话题 音乐信息检索 子模块使用 当 Peter 带领另一个团队做 MIR 并且他们的代码是开源的(谢谢!)时, instrument-recognition文件夹被添加为...
ghstack 方便地将diff堆栈作为单独的拉取请求提交到GitHub。 pip3 install ghstack 仅适用于Python 3.6和更高版本。... 显而易见的方法: git rebase origin/master 。 不要做git merge ; 如果这样做,
使用GitHub Action,现在可以直接在CLI中完成Git rebase操作,而无需执行进行的复杂REST调用。 。 用法 :locked_with_key: [推荐]保护将在其中发出拉取请求的分支,例如master 。 特别是,最好使用“合并之前需要...
用法 切换分支。 如果没有提供分支,它将默认为“master”。 如果提供的分支不存在,则创建它。 $ g! switch [branch] Rebase 分支与其他分支的基础。 不要使用这个功能,不完整 $ g! rebase [branch1] [branch2]...
用法 切换分支。 如果没有提供分支,它将默认为“master”。 如果提供的分支不存在,则创建它。 $ fxos switch [branch] Rebase 分支与其他分支的基础。 不要使用这个功能,不完整 $ fxos rebase [branch1] ...
GitRebaseReflogFixSample 作者: ... 这些页面描述了创建 git 存储库的一组步骤,并模拟如果您 git rebased 并让自己进入错误状态会发生什么。 然后是一种取消错误变基并重新开始变基的方法。 #享受!
安装从Github 发行版页面下载二进制发行版,或者您可以运行cargo install autorebase用法只需在您的存储库中运行autorebase 。这将执行以下操作更新master ,通过使用--ff-only拉它,除非您已将其签出并带有挂起的...
Yumemi Co.,Ltd. iOS培训 在以接近业务的方式开发应用程序时这是一项培训,旨在获得有关iOS应用程序开发的基本评论和实践技能。 概述 请开发天气预报应用。 ... 让我们使用git rebase命令。 (注1
然后,我们可以为您提供对此存储库的写访问权限,以便您可以基于此存储库打开PR,并且我们可以更轻松地遵循正在使用的rebase-be-merge方法(甚至可以自己进行rebase)。 评论 我们正在使用请求请求审核,以确保代码...