Rewriting History with Git Rebase
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的更多相关文章
- git rebase 的使用 (用于撤销某次commit)
Q: I wrote the wrong thing in a commit message. Alternatively, I've forgotten to include some files. ...
- [译]git rebase
rebase就是重新定义你分支的起点, 分支上的commit将生成对应的新的commit并放在你指定的新的起点commit后, 分支上的老commit将被删除. rebase就是将你的分支从一个com ...
- git rebase 介绍
git rebase是对commit history的改写.当你要改写的commit history还没有被提交到远程repo的时候,也就是说,还没有与他人共享之前,commit history是你私 ...
- [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, ...
- 团队开发里频繁使用 git rebase 来保持树的整洁好吗?
用了以后, 树可以非常清晰, 某种程度上便于追踪, 但是 push --force 就多多了,不用呢, 合并没有远程仓库被修改的麻烦, 可是追踪又不清晰... git rebase是对commit h ...
- git merge和git rebase的区别(转)
Description git rebase 和 git merge 一样都是用于从一个分支获取并且合并到当前分支,但是他们采取不同的工作方式,以下面的一个工作场景说明其区别 场景: 如图所示: ...
- git squash 和 git rebase
In git, what is the difference between merge --squash and rebase? 上面链接的回答中的总结: Both git merge --squa ...
- git rebase vs git merge详解
https://medium.com/@porteneuve/getting-solid-at-git-rebase-vs-merge-4fa1a48c53aa#.std3ddz0g 请参考另外一篇文 ...
- git rebase 和 git merge 总结
git merge 和 git rebase 都是用于合并分支,但二者是存在区别的. 在使用时,记住以下两点: 当你从 remote 去 pull 的时候,永远使用 rebase(除了一个例外) 当你 ...
随机推荐
- web开发学习之旅---css第一天
一.css全称 Cascade Style Sheet层叠样式表 二.css引入方式 行内样式:<h2 style="color:#0F0">Hello World&l ...
- ACM——简单排序
简单选择排序 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte总提交:836 测试通过:259 描述 给定输入排序元素 ...
- Angularjs中使用$location获取url参数时,遇到的坑~~~
今天在开发时候,需要用到Angularjs1.4.6获取url参数,网上查了一下,有部分文章提到用$location来获取.大致方法如下 var app = angular.module('myApp ...
- JS中的replace方法以及与正则表达式的结合应用
replace方法的语法是:stringobj.replace(rgexp, replacetext) 其中stringobj是字符串(string),reexp可以是正则表达式对象(regexp)也 ...
- ITextSharp用来生成 PDF 的一个组件
iTextSharp 是用来生成 PDF 的一个组件,在 1998 年夏天的时候,Bruno Lowagie ,iText 的创作者,参与了学校的一个项目,当时使用 HTML 来生成报告,但是,使用 ...
- Ext.Net学习笔记02:Ext.Net用法概览
这两天越来越觉得Ext.Net很强大,如果运用熟练可以极大的提高编程效率.如果你也要学习Ext.Net,推荐你看一下<Ext.Net Web 应用程序开发教程>. Ext.Net与ExtJ ...
- 暑假集训(1)第四弹 -----Find a way(Hdu2612)
Description Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Nin ...
- Struts2配置文件_常量属性_独立测试分析
<constant name="struts.devMode" value="true" /> 设置开发模式,可以了解详细信息,该属性指定视图标签默 ...
- YII 开启URL伪静态
1.开启apache的mode_rewrite模块 去掉LoadModule rewrite_module modules/mod_rewrite.so前的“#”符号 确保<Directory ...
- PHP AOP
看到一篇好文,果断收藏 点击打开链接http://www.cnblogs.com/afritxia2008/archive/2010/07/03/1770427.html