`
jaesonchen
  • 浏览: 311532 次
  • 来自: ...
社区版块
存档分类
最新评论

git rebase

    博客分类:
  • git
 
阅读更多

rebase

假设你现在基于远程分支"origin",创建一个叫"mywork"的分支。

$ git checkout -b mywork origin

 

 

现在我们在这个分支做一些修改,然后生成两个提交(commit).

$ vi file.txt
$ git commit
$ vi otherfile.txt
$ git commit
...

但是与此同时,有些人也在"origin"分支上做了一些修改并且做了提交了. 这就意味着"origin"和"mywork"这两个分支各自"前进"了,它们之间"分叉"了。

 

 

在这里,你可以用"pull"命令把"origin"分支上的修改拉下来并且和你的修改合并; 结果看起来就像一个新的"合并的提交"(merge commit):

 

 

但是,如果你想让"mywork"分支历史看起来像没有经过任何合并一样,你也许可以用 git rebase:

$ git checkout mywork
$ git rebase origin

这些命令会把你的"mywork"分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把"mywork"分支更新 到最新的"origin"分支,最后把保存的这些补丁应用到"mywork"分支上。

 

 

当'mywork'分支更新之后,它会指向这些新创建的提交(commit),而那些老的提交会被丢弃。 如果运行垃圾收集命令(pruning garbage collection), 这些被丢弃的提交就会删除. (请查看 git gc)

 

 

现在我们可以看一下用合并(merge)和用rebase所产生的历史的区别:

 

 

在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;在解决完冲突后,用"git-add"命令去更新这些内容的索引(index), 然后,你无需执行 git-commit,只要执行:

$ git rebase --continue

这样git会继续应用(apply)余下的补丁。

在任何时候,你可以用--abort参数来终止rebase的行动,并且"mywork" 分支会回到rebase开始前的状态。

$ git rebase --abort
分享到:
评论

相关推荐

    git rebase 合并提交记录,学习代码

    在开发过程中,我们经常需要合并代码,而`git rebase`就是一种强大的工具,用于整理和优化提交历史,使其更加整洁。本文将深入探讨`git rebase`的原理和使用方法。 ### Git Rebase 基本概念 `git rebase`主要用于...

    前端大厂最新面试题-git rebase_ git merge.docx

    git rebase 和 git merge 的理解与区别 Git 是一个版本控制系统,广泛应用于软件开发过程中。其中,git rebase 和 git merge 是两个常用的命令,都是用于合并分支,但是它们的实现机制和应用场景却有所不同。 git...

    git rebase 将提交点放置在一条直线上,提交点根据合并时间排序

    git rebase 命令可以将提交点放置在一条直线上,并根据提交时间进行排序。这是 git rebase 的一个常见用途。 当使用 git rebase 时,Git 会从指定的提交开始,重新应用后续的提交。这样可以将一系列提交重新排列,形成...

    详解git merge 与 git rebase的区别

    Git 是一个分布式版本控制系统,它提供了两种合并分支的策略:`git merge` 和 `git rebase`。两者都是为了整合不同分支的更改,但它们在处理合并的方式上有显著的差异。 ## Git Merge `git merge` 是最常见的合并...

    vscode-git-rebase:⌥VSCode扩展,可使用热键快速设置交互式git rebase的操作

    Git Rebase(Visual Studio代码扩展) 使用键盘快捷键可以快速编辑交互式Git基准库的操作。 如何使用 按下与您所需的git rebase操作相对应的键。 此命令将应用于所有选定的行。 键盘快捷键: p将命令设置为“ ...

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

    `git rebase -i`是Git中“交互式变基(interactive rebase)”的缩写。交互式变基允许开发者在一系列提交上执行一系列的命令,比如编辑提交、合并提交、重排提交等。其中的`-i`选项使得命令进入交互模式,允许用户对...

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

    **Node.js - Rebase-editor: 为Git交互式rebase打造的CLI工具** Git作为一款强大的版本控制系统,其丰富的功能让开发者在管理代码历史时有了极大的灵活性。在这些功能中,`git rebase` 是一个非常有用的命令,它...

    git rebase 成功之后撤销的操作方法

    然而,不当使用`git rebase`可能会导致问题,特别是当你已经完成了一个rebase操作后,可能需要知道如何撤销它。本文将详细介绍在`git rebase`成功后如何恢复到rebase前的状态。 `git rebase`的主要功能是将一个分支...

    git,修改commit,合并commit

    git rebase -i HEAD~n,n条commit进行rebase 将需要修改的commit信息,将pick命令改为 r 命令;ESC 输入 :wq 回车 开始修改commit信息,修改完,ESC 输入 :wq 回车 打印出成功 git log oneline -n,查看n条log信息,...

    Sungq1990#blog#git rebase操作1

    merge主要发生在这样几个地方1 两个人同时开发一个分支,在拉取对方代码的时候2 要将代码合并到master的时候git pull origin master

    一不小心git rebase后出现(master|REBASE 1/10)的问题及解决办法

    Git rebase 是一个强大的版本控制工具,它允许你将一系列提交重新应用到不同的基分支上,通常是为了整合历史记录或者保持提交的线性。然而,如果不小心操作,可能会遇到一些问题,例如标题中提到的 "master|REBASE 1...

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

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

    git-rebase-i-playground:用于测试git rebase -i的不同用例的运动场

    通过此实验室/游乐场学习“ git rebase -i” 是否想学习如何正确使用git rebase -i (也称为交互式rebase)而又不会使您的生产仓库面临风险? 您来对地方了! 此仓库中包含的脚本将创建一个git仓库(带有2个克隆副本...

    Git实战IDEA操作

    Git实战IDEA操作详解 Git是一款分布式版本控制系统,它在软件开发中扮演着至关重要的角色,帮助团队协作和代码管理。IntelliJ IDEA(简称IDEA)是广受欢迎的Java集成开发环境,同样也提供了强大的Git集成功能。本文...

    fear-and-loathing-with-git-rebase:我在 MAS 上关于 git rebase 的闪电演讲

    恐惧和厌恶 git rebase Git 不是 Subversion,我们可以自由地以任何我们认为合适的方式重写历史,这在生成原子提交和我们希望提交序列讲述一个故事时很重要。 许多人要么不知道这是可能的,要么害怕这样做,但基础...

    git分支操作.txt

    gti详细的分支操作,在git中,可以使用git merge 和git rebase两个命令来进行分支的合并。 git merge 和git rebase在大体上都差不多,下文主要以git merge来例来讲解分支的合并流程。 如果你想了解分支合并的更多...

    gitpractise_ex:用于Git Rebase和合并的仓库

    本项目"gitpractise_ex"显然是一个专为练习Git的Rebase和合并功能而创建的仓库。让我们深入探讨一下这两个核心概念及其重要性。 **Git Rebase** Git Rebase允许开发者将一个分支上的更改应用到另一个分支的历史之上...

Global site tag (gtag.js) - Google Analytics