git基本使用--分支和合并

众所周知,Git的分支是其广受欢迎的的重要原因之一,版本的分支(branch)和合并(merge)可以很方便的对项目进行模块开发。接下来将通过一个小Demo来记录一下自己对于Git分支和合并的使用。

先讲一个需求,项目demo是一个已发布的项目,在远程仓库中发布的分支为master分支,在项目运行过程中出现了两个问题。第一,demo项目出现了一个小BUG;第二,需要扩展一个新功能。这两个问题需要两个程序员(小李修改Bug,小王添加新功能)来单独完成,那么他们应该怎样去合理的使用Git的分支和合并来完成工作呢?

clone项目到本地

小李和小王都将远程仓库的项目通过$ git clone demo命令克隆到本地仓库。接下来我们想一下,我们是不是要保证项目master的分支不能被修改,还得保证两个人单独完成工作且相互不能影响,最后两个人完成各自任务后提交项目,并能很好的合并呢?要想完成这样的目的就需要借助Git的分支和合并的概念来完成这个需求了。

新建分支

将项目clone到本地以后,小王和小李可以在他们的本地仓库进行新建分支,新建的分支相当于从master分支重新复制一份出来进行各自的操作(但实际并没有复制,是指针的变化)


git checkout

Git代码解释

    // 列出所有本地分支
    $ git branch

    // 列出所有远程分支
    $ git branch -r

    // 列出所有本地分支和远程分支
    $ git branch -a

    // 新建一个分支,但依然停留在当前分支
    $ git branch [branch-name]

    // 新建一个分支,并切换到该分支
    $ git checkout -b [branch]

    // 新建一个分支,指向指定commit
    $ git branch [branch] [commit]

    // 新建一个分支,与指定的远程分支建立追踪关系
    $ git branch --track [branch] [remote-branch]

    // 切换到指定分支,并更新工作区
    $ git checkout [branch-name]

    // 切换到上一个分支
    $ git checkout -

    // 建立追踪关系,在现有分支与指定的远程分支之间
    $ git branch --set-upstream [branch] [remote-branch]

    // 合并指定分支到当前分支
    $ git merge [branch]

    // 选择一个commit,合并进当前分支
    $ git cherry-pick [commit]

    // 删除分支
    $ git branch -d [branch-name]

    // 删除远程分支
    $ git push origin --delete [branch-name]
    $ git branch -dr [remote/branch]

就这样小李和小王各自建立一个分支开始了辛勤的创造。
由于小李只是修改一个bug,多以很快小李就完成了自己的工作,于是他将自己的分支提交到远程仓库中,并且请测试人员去测试。

提交分支到远程仓库

小李完成里本地代码的工作,准备提交代码到远程仓库。但是,此时远程仓库中的master分支可能已经被其他程序员修改了(比如小王提前完成了任务并通过测试已上线,我手动修改了一下远程仓库的master分支的一个文件来模拟这个过程),所以小李需要将远程仓库的mater分支与他自己的分支进行一下合并,以保证他的分支是最新的。

小李合并分支

首先小李将自己的分支切换到master分支,并通过$ git pull来从远程仓库获取master的最新内容,然后在切回自己的工作分支,执行$ git merge master将自己的工作分支和最新的master分支进行合并。

git merge

小李提交分支

然后小李将自己的分支提交到远程仓库


git merge

至此,小李的工作就基本完成了,如果测试通过的话,才算真正完成。

测试人员合并分支并发布

测试人员从远程仓库中clone下小李提交的的工作分支,然后进行测试,经过测试后,测试人员将小李的工作分支和master的工作分支进行合并(注意:小李操作的是他的工作分支和master合并,改变的是他的工作分支;而测试人员操作的是maste分支和小李的工作分支,改变的是master分支),然后可以选择删除小李的工作分支(也可以不删除),最终上线项目。


git merge

git merge

删除小李的工作分支


git merge

这样小李的工作彻底完成了,接下来咱们在看一下小王的工作情况。

小王经过一段时间的拼搏挣扎之后,新功能也完成了,他要做的也是想小李一下提交分支并请测试人员测试,然后再由测试人员合并分支并发布项目,过程和上面一样,下图为模拟流程。
小王的工作:

git merge

git merge

测试人员的工作:
git merge

git merge

总结

本文通过小李和小王以及测试人员对一个需求的实际场景进行了模拟Git的分支和合并的操作,其中截图部分代码在实际操作中可能不尽相同,但整个流程就是这样。

本文部分解释和说法借鉴自阮一峰关于Git的博文。
阮一峰关于Git的文章

Git使用规范流程
常用Git命令清单
Git分支管理策略
Git远程操作详解
Git工作流程

廖雪峰的Git教程

Git教程

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

推荐阅读更多精彩内容