http://code.tutsplus.com/tutorials/rewriting-history-with-git-rebase--cms-23191

1. Rebasing for a Linear History
The first use case we'll explore involves a divergent project history.

Consider a repository where your production branch has moved forward while you were developing a feature:

To rebase the feature branch onto the master branch, you would run the following commands:
git checkout feature
git rebase master

This transplants the feature branch from its current location to the tip of the master branch:

注意下图,rebase中的base指的是某一个commit

There are two scenarios where you would want to do this.
First, if the feature relied on the new commits in master, it would now have access to them.
Second, if the feature was complete, it would now be set up for a fast-forward merge into master.
In both cases, rebasing results in a linear history, whereas git merge would result in unnecessary merge commits.

有2种情况会使用到rebase

1.如果feature分支,依赖于master分支上的新提交一系列commit【将master合并到feature】

2.如果feature分支已经完成,那么就需要将feature通过fast-forward的方式合并到master【将feature合并到master】

======使用普通的合并,无法fast-forward,会生成多余的commit====

For example, consider what would happen if you integrated the upstream commits with a merge instead of a rebase:

git checkout feature
git merge master

This would have given us an extra merge commit in the feature branch.
What's more, this would happen every time you wanted to incorporate upstream commits into your feature.

Eventually, your project history would be littered with meaningless merge commits.

第一种情况【将master合并到feature】

This same benefit can be seen when merging in the other direction.
Without a rebase, integrating the finished feature branch into master requires a merge commit.
While this is actually a meaningful merge commit (in the sense that it represents a completed feature), the resulting history is full of forks:

第二种情况【将feature合并到master】

======使用普通的合并,无法fast-forward,会生成多余的commit====

When you rebase before merging, Git is able to fast-forward master to the tip of feature.
You'll find a linear story of how your project has progressed in the git log output—the commits in feature are neatly grouped together on top of the commits in master.
This is not necessarily the case when branches are tied together with a merge commit.

Resolving Conflicts

冲突的处理可以去原文看

Rewriting History with Git Rebase的更多相关文章

  1. git rebase 的使用 (用于撤销某次commit)

    Q: I wrote the wrong thing in a commit message. Alternatively, I've forgotten to include some files. ...

  2. [译]git rebase

    rebase就是重新定义你分支的起点, 分支上的commit将生成对应的新的commit并放在你指定的新的起点commit后, 分支上的老commit将被删除. rebase就是将你的分支从一个com ...

  3. git rebase 介绍

    git rebase是对commit history的改写.当你要改写的commit history还没有被提交到远程repo的时候,也就是说,还没有与他人共享之前,commit history是你私 ...

  4. [Practical Git] Clean up commits with git rebase

    Sometimes its nice to clean up commits before merging them into your main code repo; in this lesson, ...

  5. 团队开发里频繁使用 git rebase 来保持树的整洁好吗?

    用了以后, 树可以非常清晰, 某种程度上便于追踪, 但是 push --force 就多多了,不用呢, 合并没有远程仓库被修改的麻烦, 可是追踪又不清晰... git rebase是对commit h ...

  6. git merge和git rebase的区别(转)

      Description git rebase 和 git merge 一样都是用于从一个分支获取并且合并到当前分支,但是他们采取不同的工作方式,以下面的一个工作场景说明其区别 场景:  如图所示: ...

  7. git squash 和 git rebase

    In git, what is the difference between merge --squash and rebase? 上面链接的回答中的总结: Both git merge --squa ...

  8. git rebase vs git merge详解

    https://medium.com/@porteneuve/getting-solid-at-git-rebase-vs-merge-4fa1a48c53aa#.std3ddz0g 请参考另外一篇文 ...

  9. git rebase 和 git merge 总结

    git merge 和 git rebase 都是用于合并分支,但二者是存在区别的. 在使用时,记住以下两点: 当你从 remote 去 pull 的时候,永远使用 rebase(除了一个例外) 当你 ...

随机推荐

  1. Linux的各种命令(android adb shell)

    win+r 调出运行,输入CMD adb shell 进入手机的控制终端,相当于原生的Linux系统的各种操作. 当提示符为$符号,说明未获得超级管理员权限,输入su,可编程# adb kill-se ...

  2. Android应用程序消息处理机制笔记

    看老罗的Android源码情景分析学习的时候,边抄边理解再总结.希望能为面试提供点帮助吧. 1.Android应用程序是通过消息来驱动,Android应用程序每一个线程在启动时,都可以首先在内部创建一 ...

  3. windows下能读写linux分区的软件 转

    1. ext2ifs 这个工具与explore2fs都是John Newbigin使用Delphi写的,explore2fs Copyright (C) 2000,Ext2IFS v0.3 Copyr ...

  4. java新手笔记2 数据类型

    1.注释 /** doc注释 * 类说明信息 */ //声明类 文件名与类名一致 public class World {//类定界符 //声明方法 main方法 public static void ...

  5. 01_JavaMail_03_邮件发送简单实例

    [JavaMail中的核心类] 1.Session:类似Jdbc中的Connection的作用 2.MimeMessage:邮件信息类 3.Transport:发送器,用来发送邮件 [工程截图] [具 ...

  6. GIS科研站

    http://www.3sbase.com/3sbase/ 近年来,地理信息科学发展迅猛,科研人员日益增多,但目前尚缺乏良好的交流平台,致使优秀的科研成果难以推广.同时,对于大量的GIS学生而言,对国 ...

  7. Entity Framework 的事务 DbTransaction

    事务代码实现如下: public static void Transaction() { myitEntities entity = null; DbTransaction tran = null; ...

  8. 一次plsql 问题记录

    环境 : window 7 x64  oracle 10.2g  plsql 10.0.5 问题是 新装的 oracle10.2 plsql 一直连接不上 ,oracle_home 配置都对 .sql ...

  9. erlang 练手 进程环

    Erlang 编程指南第四章 练习4-2 编写一个程序,生成N个进程并相连成环,启动环后绕环发送M个消息,当收到退出消息后终止. ringStart(M,N,Message, Cp) -> io ...

  10. ajax GET和POST请求web api 的几种方式

    GET请求 1.无参数get请求 一般get请求有两种写法,一种是 $.get()   一种是$.ajax({type:"get"}), 我个人比较喜欢用后者. 下面例子主要是ge ...