Git使用之追加提交和合并提交

在上一篇Git使用教程之版本回退我们已经学会如何使用git进行版本管理,并尝试提交和版本回退。接下来我们将继续学习,有关提交的高级用法。例如我们想把多次提交合并成一次提交,把漏提交的内容追加到上次提交。本节我们将使用两个重要的命令git commit --amendgit rebase命令。

git commit --amend追加提交

首先我们设想下面一种情况,在开发过程中,你为了完成某一项工作,修改了很多个文件,最后当工作完成的时候,我们需要将这次完成的功能提交到代码库。提交的时候你可能会这么注释“finish xxx work”完成了某某某工作。这个工作完成之后,你可能要进行下一个工作。在进行下个工作之前,你突然发现刚才的提交漏了两个文件,这个时候如果你再次提交一次,显然是不合适的。因为那样会产生两次提交不利于以后的版本维护。那么这个时候就需要用到git commit --amend了。千说不如一练。看下面的demo。
首先新建一个文件1.txt和新建一个2.txt,然后将1.txt添加到暂存区,并提交到版本库,log为commit 1.txt。然后将2.txt添加到暂存区,然后提交的时候使用--amend
会出现如下的界面

  1 commit 1.txt
  2
  3 # Please enter the commit message for your changes. Lines starting
  4 # with '#' will be ignored, and an empty message aborts the commit.
  5 #
  6 # Date:      Wed Jul 11 15:19:00 2018 +0800
  7 #
  8 # On branch master
  9 # Changes to be committed:
 10 #       new file:   1.txt
 11 #       new file:   2.txt
 12 #

这个时候我们看到了第一次提交的内容和log。提交完成之后我们查看当前git状态和提交历史。我们发现虽然我们提交了两次,但是log中只出现了一次提交。因为我们使用--amend将第二次提交追加到第一次提交上了。这样会使我们的提交历史变得整洁清晰。

commit ce42e88895cc87c43458c284df911b500b7e94fd (HEAD -> master)
Author: snowzhang <xxxx@aliyun.com>
Date:   Wed Jul 11 15:19:00 2018 +0800

    commit 1.txt and commit 2.txt

git rebase 合并多次提交

rebasegit中是一个非常有魅力的命令,使用得当会极大提高自己的工作效率;相反,如果乱用,会给团队中其他人带来麻烦。它的作用简要概括为:可以对某一段线性提交历史进行编辑、删除、复制、粘贴;因此,合理使用rebase命令可以使我们的提交历史干净、简洁!
前提:不要通过rebase对任何已经提交到公共仓库中的commit进行修改(你自己一个人玩的分支除外)
当我们在本地仓库中提交了多次,在我们把本地提交push到公共仓库中之前,为了让提交记录更简洁明了,我们希望把如下分支B、C、D三个提交记录合并为一个完整的提交,然后再push到公共仓库。

git rebase commit.png
下面开始实践rebase命令

  • 首先创建三次次提交BCD
snowzhang@snowdeMBP-2:~/gitLearn$     git log
commit 9a931be7950033df6905b8b77dc590cdfc37367c (HEAD -> master)
Author: snowzhang <snxxxxxxx@aliyun.com>
Date:   Wed Jul 11 15:50:55 2018 +0800

    commit D

commit 68b8f4ce42e0201fb731085790ffeb190d9747b5
Author: snowzhang <snxxxxxxx@aliyun.com>
Date:   Wed Jul 11 15:50:06 2018 +0800

    commit C

commit d9bebec678b202ac388518ed0aed3a2fb7bc85b3
Author: snowzhang <snxxxxxxx@aliyun.com>
Date:   Wed Jul 11 15:49:27 2018 +0800

    commit B

这里我们使用命令:

git rebase -i  [startpoint]  [endpoint]

其中-i的意思是--interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间)。
在查看到了log日志后,我们运行以下命令:

git rebase -i ce42e8889
rebase vim .png

上面显示未注释区域为我们的编辑区域,下面注释区的Commands为命令,具体命令解释如下:

  • pick:保留该commit(缩写:p)
  • reword:保留该commit,但我需要修改该commit的注释(缩写:r)
  • edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
  • squash:将该commit和前一个commit合并(缩写:s)
  • fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
  • exec:执行shell命令(缩写:x)
  • drop:我要丢弃该commit(缩写:d)

我们将按照上面的命令提示,修改pick成下面这样

pick d9bebec commit B
s 68b8f4c commit C
s 9a931be commit D

最终查看git log会给出这样的提示

commit 3ab108fd7e0fb3a7477763f2ef8032251105e69f (HEAD -> master)
Author: snowzhang <snxxxx@aliyun.com>
Date:   Wed Jul 11 15:49:27 2018 +0800

    commit B

    commit C

    commit D

证明我们已经将BCD三次提交合并成一次提交了。
至此,关于两种合并方式已经演示完毕。写的不好,还请多多包涵。
下一节,讲讲什么是工作区,暂存区,和git库,以及他们之间的关系。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,519评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,842评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,544评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,742评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,646评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,027评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,169评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,324评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,268评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,299评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,996评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,591评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,911评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,288评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,871评论 2 341

推荐阅读更多精彩内容

  • 常听人说,那不就一句话的事吗? 我就在想,这一句话能够办成什么事?虽然有些人喜欢快言快语,有些人喜欢言简意赅,但一...
    Josh叔叔阅读 177评论 0 1
  • “身体是革命的本钱”这句妇孺皆知的话曾几何时消失在我们的生活中,还能记起你已经有多久没有锻炼过吗,朋友? 前几天公...
    梦里都是坚定阅读 93评论 0 0
  • 问题1: 今天在运行模拟器的时候出现了这个问题。每次运行都报这个错误 Could not hardlink cop...
    何康老鬼阅读 1,863评论 0 0
  • 今天跟邻居陪我去一个好远的地方,确认一个事情,我们从十点钟出发,一直走到晚上七点钟才回来。 总结出一个字,那叫做累...
    慈觉阅读 224评论 0 0
  • 中午放学的时候我去接的孩子,远远的我就看到他们班级了,他也看到了我,但没有提前下队,直到到了目的地,解散后...
    健康快乐_4123阅读 365评论 0 0