git rebase -i

在使用git开发的时候经常会面临一个常见的问题。多个commit 需要合并为一个完整的commit提交。

合并多个commit为一个完整的commit

我先基于develop主分支拉出一个功能分支(每个人和每个公司对分支的管理都不太一样,这里不需要太纠结。)。这里的develop是开发主分支,所有的开发功能代码都需要回归到这个develop分支中去。

git branch -a –vv

develop_fixbug_imageprint 分支是我基于远程develop分支拉出来的开发分支,我会基于这个分支来fix一些bug。我们分别看下develop、develop_fixbug_imageprint  commit log。

git checkout develop

git  log

git checkout develop_fixbug_imageprint

git log

develop_fixbug_imageprint的commit log是和devleop commit log 一模一样。我们现在切换到develop_fixbug_imageprint进行一些操作。

添加一个1.txt文件,然后git add . ,git commit –m’add 1.txt’。

再添加一个2.txt 文件,然后git add . ,git commit –m’add 2.txt’。 

现在develop_fixbug_imageprint分支里有两个commit。这两个commit都是为了fix当前这个bug而做的两个提交。现在我们要合并代码上主develop分支。总不能把这两个commit直接提交上去,这里还好只有两个commit,但是一般项目开发周期两个星期的话,你起码有十几个commit。那这样提交上去之后就很难管理和跟踪。(我以前都是这样干的,现在发现这样不好跟踪管理。)

那么我们如何完成这个合并commit尼,就需要用到git rebase 命令。

先来解释下git rebase 。你其实可以把它理解成是“重新设置基线”,将你的当前分支重新设置开始点。这个时候才能知道你当前分支于你需要比较的分支之间的差异。

比如,develop_fixbug_imageprint分支是来自develop分支,那么从test commit开始后面我们基本上都是各自发展,现在在develop_fixbug_imageprint分支上有两个commit,我们需要找一个基准,这个基准就是git需要找到哪些是你后来提交的commmit,总的有个参照。

git reabse –i develop

git rebase 立马知道develop与develop_fixbug_imageprint之间的差异。因为我们是基于develop设置rebase的。git rebase –i ,这里的”-i“是指交互模式。就是说你可以干预rebase这个事务的过程,包括设置commit message,暂停commit等等。

这里我们要求很简单就是合并之前的commit且重新设置commit message。

我们设置第二个”pick 657a291 add 2.txt” 为” s 657a291 add 2.txt”这里的s就是squash命令的简写。

跳出来了一个临时文件,最上面是两行commit message。我们修改下这个总体的commit message。

删除之前的两条message(ESC dd),设置一总的message 然后保存退出。(ESC wq)

我们查看下log。git log

是不是没有了之前的两个commit。

原理很简单:rebase需要基于一个分支来设置你当前的分支的基线,这基线就是当前分支的开始时间轴向后移动到最新的跟踪分支的最后面,这样你的当前分支就是最新的跟踪分支。这里的操作是基于文件事务处理的,所以你不用怕中间失败会影响文件的一致性。在中间的过程中你可以随时取消rebase 事务。git rebase –abort

在进入git rebase –i 交互模式,你可以做的事情就很多了,可以设置edit 编辑commit 内容,可以让他暂停commit操作。等等。

 
分类: git

git 提交的更多相关文章

  1. git提交时支持文件名大小写的修改

    在windows环境下,git提交文件时,默认对文件名大小写不敏感,若修改了文件名字的大小写,可能会导致提交时没有记录,文件名修改不成功.网上搜集了几种解决方法,现总结下: 1. 修改git conf ...

  2. 怎么修改git提交过的内容

    git修改历史提交   Git使用amend选项提供了最后一次commit的反悔.但是对于历史提交呢,就必须使用rebase了. git rebase -i HEAD~3 表示要修改当前版本的倒数第三 ...

  3. Git提交引用和引用日志

    转载自:https://github.com/geeeeeeeeek/git-recipes/wiki/5.5-Git%E6%8F%90%E4%BA%A4%E5%BC%95%E7%94%A8%E5%9 ...

  4. 设置Git提交时不用输入用户名和密码

    在用git提交时代码至github上时每次都要输入用户名和密码,当提交操作较为频繁时非常不方便,可以按下文中的介绍,设置成提交时不用输入用户名和密码: 1.在当前库下,已经运行过 git remote ...

  5. 解决git提交问题error: The requested URL returned error: 403 Forbidden while accessing

    git提交代码时,出现这个错误"error: The requested URL returned error: 403 Forbidden while accessing https&qu ...

  6. 写得好 git 提交信息

    编写好 git 提交信息 提交信息 我们作出答复,更改将提交相关信息,这些信息通常被认为是重要的信息会小心留下应该离开,你为什么需要这个提交实例,提交解决任何问题. 我们需要良好的信息组织,虽然后来, ...

  7. 老鸟都应该注意的git 提交规范

    不知道大家有没有看过自己项目的git 提交信息-----我看过好多次 ,不忍直视  然后提醒一起的小伙伴 :大家规范点 信息要详细, 过段时间再看下 ,还是一样. 相信很多猿都有这样的感受,对于垃圾的 ...

  8. git学习四:eclipse使用git提交项目

    支持原创:http://blog.csdn.net/u014079773/article/details/51595127 准备工作: 目的:eclipse使用git提交本地项目,提交至远程githu ...

  9. 使用git提交到github,每次都要输入用户名和密码的解决方法

    使用git提交文件到github,每次都要输入用户名和密码,操作起来很麻烦,以下方法可解决,记录以下. 原因:在clone 项目的时候,使用了 https方式,而不是ssh方式. 默认clone 方式 ...

  10. git提交代码到github

    前言:转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/52117504 git提交代码到github 命令汇总: git init git ...

随机推荐

  1. 两个字符串,若为数字则都相加,若有一个不为数字则,输出error

    import java.util.*; /*请设计一个算法能够完成两个用字符串存储的整数进行相加操作,对非法输入则返回“error”: * 用例:123 234 * 输出:357 * 用例123 as ...

  2. Objective-C /iphone开发基础:协议(protocol)

    protocol协议时为了补充Objective-C 只能单继承的缺陷而增加的一个新功能.Objective-C重所有的方法都是虚方法,所以在oc重也就没有关键字 virtual一说,有了协议可以补充 ...

  3. 最佳vim技巧

    最佳vim技巧----------------------------------------# 信息来源----------------------------------------www.vim ...

  4. 根据日期字符串获取星期几,日期获取星期,时间获取星期,js获取星期

    根据日期字符串获取星期几,日期获取星期,时间获取星期,js获取星期 >>>>>>>>>>>>>>>>&g ...

  5. fiddlercore 抓包获取cookie的方法

    public partial class form1 : Form { public form1() { string cookies = ""; InitializeCompon ...

  6. 用js操作表格

    效果图: 任务: 1. 鼠标移到不同行上时背景色改为色值为 #f2f2f2,移开鼠标时则恢复为原背景色 #fff var tr=document.getElementsByTagName(" ...

  7. VS打包

    同学让帮忙打包个VC的程序,程序比较简单,是带access数据库的统计查询软件,之前用Visual Studio 6.0自带的Package & Deployment Wizard 工具打包过 ...

  8. 编译gd-2.0.35.tar.gz时报错:gd_png.c:16:53: error: png.h: No such file or directory

    编译gd-2.0.35.tar.gz时报错: gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/local/freetype/include/freetype2 -I/us ...

  9. Oracle Text Slowly

    When  oracle text more and more slowly, execute the following script: ANALYZE TABLE Table_Name COMPU ...

  10. 无限大整数相加算法的C语言源代码

    忙里偷闲,终于完成了无限大整数相加算法的C语言代码,无限大整数相加算法的算法分析在这里. 500位的加法运行1000次,不打印结果的情况下耗时0.036秒,打印结果的情况下耗时16.285秒. 下面是 ...