`

git-rebase用法总结

    博客分类:
  • Git
 
阅读更多

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)。
分享到:
评论

相关推荐

    git-rebase-reword:修改任何git commit不仅要持续

    git-rebase-reword git-rebase-reword是一个简单的git命令,以与修改相同的方式来更改一个提交(最后一个或更旧的提交) 文献资料 它是基于对rebase交互操作的名称来命名的,以补充提交“ reword”。 参见和 -...

    git-svn使用用法

    基本的使用方法包括:本地修改代码后使用git commit命令提交更改,使用git svn rebase命令同步远程svn服务器的更改,以及使用git svn dcommit命令推送更改到远程svn服务器。 总之,git-svn是一个将Git的灵活性与SVN...

    Git-2.24.0.2-64-bit.zip

    此外,学习和使用Git的图形用户界面(如SourceTree或GitHub Desktop)也是提升效率的好方法。 在协作环境中,Git的特性如代码审核(`git rebase`和`git cherry-pick`)、分支策略(如特性分支和主分支)以及冲突...

    Node.js-Rebase-editor一个专门用于Git交互式rebase的简单CLI应用

    **使用方法** 安装`Rebase-editor`通常通过npm(Node.js的包管理器)进行,只需在终端中运行`npm install -g rebase-editor`。之后,用户可以使用`rebase-editor`命令启动工具,指定要操作的分支。例如:`rebase-...

    git-flow 备忘清单

    - **分支模型**: `git-flow` 是一种基于合并的解决方案,不支持重置(rebase)分支。 - **版本控制**: `git-flow` 的核心在于通过严格的分支管理来保证版本控制的有效性和清晰度。 #### 五、总结 `git-flow` 提供...

    git-2.5.0.tar.gz

    总结,"git-2.5.0.tar.gz" 是Git的一个重要版本,包含一系列改进和新特性,通过解压、编译和安装,用户可以在本地环境中使用这一版本的Git,享受其带来的更高效、更稳定的版本控制体验。同时,理解Git的基本概念、...

    Git-2.37.0-64位windows安装包

    - **Git官方文档**:详尽的参考手册,包括所有命令和用法。 - **Atlassian Git教程**:互动式学习平台,适合初学者。 通过以上介绍,我们可以看出Git作为强大的版本控制系统,不仅提供了丰富的功能,还有广泛的...

    Git-2.25.1-64-bit.exe.7z

    此外,Git还支持交互式重置(interactive rebase)、 stash(暂存区)功能和 cherry-pick(挑选提交)等高级用法,帮助开发者更好地管理和协作代码。 总的来说,Git-2.25.1-64-bit.exe是针对Windows用户的高效代码...

    Git-2.34.1-64-bit.exe V2022

    在实际开发中,Git还支持许多高级用法,如交互式暂存(`git add -i`)、变基(`git rebase`)、标签(`git tag`)和cherry-pick(`git cherry-pick`)等,这些功能为团队协作和项目维护提供了强大的支持。 总之,Git-2.34.1...

    Git-2.10.2-64-bit TortoiseGit-2.3.0.0-64bit

    在日常开发中,了解并熟练掌握Git的基本命令和TortoiseGit的使用方法是至关重要的。例如,`git clone`用于克隆远程仓库,`git add`用于将更改添加到暂存区,`git commit`用于提交更改,`git push`用于将本地更改推送...

    git-scripts:一些有用的git-scripts

    Git是世界上最流行的分布式版本控制系统,它使得代码的版本管理和协作变得简单高效。在这个"git-scripts"项目中,我们看到了一组实用的Git脚本,这些...了解并掌握这些脚本的用法,可以让你在使用Git时更加得心应手。

    git-absorb:git commit --fixup,但是自动

    `git-commit --fixup` 是一种简化错误修复或小改进记录的方法,它创建一个新的提交,标记为需要被`rebase`时自动应用到之前的提交。 `git-absorb` 是一个由 Rust 编程语言实现的 Git 扩展,它旨在自动化 `git ...

    Git-2.20.1-64-bit.zip

    `git merge`命令允许将一个分支的更改合并到另一个分支,而`git rebase`则提供了一种线性化历史的方法,使得代码审查和合并变得更加简单。 标签是Git中的另一个重要特性,它允许用户为特定的提交打上标签,以便于...

    git-master.zip

    5. **文档**(docs/目录):详细说明项目功能、使用方法和API参考。 6. **示例**(examples/目录):演示如何使用项目功能的实际代码示例。 7. **Makefile或构建脚本**:用于编译和打包项目。 8. **.gitignore**:...

    git-cheat-sheet.pdf

    本篇将详细介绍`git-cheat-sheet.pdf`中的核心知识点,帮助理解和掌握Git的基本用法。 ##### 基本术语 - **master**: 默认的开发分支。 - **origin**: 默认的上游分支,通常是远程仓库的主分支。 - **HEAD**: 当前...

    git rebase -i 修改历史提交的方法

    这篇文章将详细探讨使用`git rebase -i`命令修改历史提交的方法,这对于初学者和专业开发者都具有一定的学习价值。 ### 什么是`git rebase -i`? `git rebase -i`是Git中“交互式变基(interactive rebase)”的缩写...

    git安装包-2.6.2

    Git是一款分布式版本控制系统,因其高效、灵活和开源的特性,在软件开发领域被广泛使用。本文将详细介绍Git的安装过程,特别是在Windows和Mac操作系统上的安装步骤,以及如何开始使用Git进行源码管理。 标题中的...

    Git-2.38.1-64-bit for windows

    本文将详细阐述Git的核心概念、主要功能、在Windows上的安装与配置,以及常见操作的使用方法。 **1. Git的核心概念** Git是一种开源的分布式版本控制系统,由Linus Torvalds创建,用于Linux内核开发。它的核心概念...

    git-2.22.0-2019-06-07更新.rar

    *“git rebase --rebase-merges”取代旧的“--preserve-merges” 选项; 后者现在标记为已弃用。 *使用--recurse-submodules进行克隆时给出的错误消息 已更新。 *完成帮助程序代码现在关注存储库本地 配置...

    git-cheatsheet

    通过上述命令和解释,我们可以清晰地了解到 Git 在实际项目开发中的使用方法。从创建仓库、管理本地更改到版本控制、合并分支,每一个环节都是 Git 强大功能的体现。熟练掌握这些基本操作是成为一名高效开发者的关键...

Global site tag (gtag.js) - Google Analytics