Git 入门系列(四)- 分支(下)合并解决冲突 / 远程分支

上一篇介绍了分支的用法,温故而知新,一起温习一下
创建并切换新分支:git checkout -b <new_branch>
切换分支使用 git checkout <branch>
查看分支 git branch 或 git branch -a
合并分支 git merge <branch>
删除分支 git branch -d <branch>

前面我们合并了 hotfix 分支到主分支 master 分支里,本篇我们继续处理 feat_6 分支
假设现在 feat_6 分支处理完了,要合并到 master 分支

合并分支 - 解决冲突

在这种情况下,feat_6 的开发历史从一个更早的地方开始分叉开来。master 分支所在提交 (C4) 不是 feat_6 分支所在提交(C5)的直接祖先,Git 不得不做一些额外的工作。 出现这种情况的时候,Git 会使用两个分支的末端所指的快照(C4 和 C5)以及这两个分支的工作祖先(C2),做一个简单的三方合并。

在合并的过程中,可能会像上篇 hotfix 一样快速跟进 fast-forward,合并即可;也可能如当前情况 Git 会将三方合并的结果做一个新的快照并且自动创建一个新的提交指向它,这个被称作一次合并提交(C6),如下图


合并往往不如人意,如果在合并分支时,这两个分支都对同一个文件的同一个部分进行了不同的修改,Git 就没法合并他们。

假设 master 和 feat_6 分支都修改了 test.txt 文件,
在 分支master 追加一行 “master: modify”
在 分支feat_6 追加一行 “feat_6: modify ”

那么当合并 feat_6 时, 就会产生冲突

git merge feat_6 合并 feat_6 分支的内容

此时 Git 做了合并,但是没有自动创建一个新的合并提交,Git 会等待你去解决合并产生的冲突(处于 MERGING 状态),通过git status查看因合冲突而处于未合并(unmerged)状态的文件。

上图中,feat6.txt 是新建文件,没有冲突,无需处理;而 test.txt 文件合并产生了冲突,需要处理

打开 test 文件


上图表示: HEAD 所指示的版本(master 分支所在位置)在 ===== 的上半部分,而 feat_6 分支所指示的版本在 ===== 的下半部分。此时需要手动合并这些内容,比如,保留两个分支的其中一个分支的内容,或者这两个改动都留着,把 <<<<<<< , ======= , 和 >>>>>>> 这些行删除即可


解决冲突之后,对文件使用 git add命令标记为冲突已解决
解决冲突也相当于修改,因此若要修改生效,同样需要 add - > commit 来完成合并提交

中断合并

在合并过程中,如果想终止合并,可以使用 git merge --abort 命令来简单地退出当前正在执行的合并操作。

需要注意的是,这个命令仅在合并后导致冲突时使用,也就是 MERGING 状态下。
git merge --abort 选项会尝试恢复到你运行合并前的状态。 但当运行命令前,在工作目录中有未储藏、未提交的修改时,在某些情况下将无法重现合并前的状态。(特别是这些文件在合并的过程中将会被修改时)

如果当前已经处于一个混乱的状态中,想重新操作,也可以运行 git reset --hard HEAD 回到之前的状态或者其他你想恢复的状态(将会清除工作目录中 working dir 所有的内容,谨慎使用)
reset 的相关使用,可参考Git 入门系列(二)

远程分支

细心的朋友应该注意到了,当前的分支都是在本地创建的,如果要推送到远程上呢?
我们回到 feat_6 分支,像向远程提交 commit 一样,使用 git push


会提示使用 git push --set-upstream origin feat_6 提交到远端


此时远端也存在了这个分支,使用 git branch -a 看一下,远程分支多了一个 feat_6

GitHub 上也可以看到远程分支


删除远程分支

前面我们说过删除分支是 git branch -d <branch>
删除远程分支使用 git push origin --delete <branch>

本篇我们补充说明了分支相关的操作

  • 合并分支:如果有合并产生冲突,解决冲突再提交即可,大多时候合并会有三种情况

    • Git 快速合并(没有冲突,不用处理,Git 直接合并)
    • Git 自动创建合并提交(没有冲突,不用处理,Git 自动合并,并产生一次提交)
    • 产生冲突,处理合并冲突并提交,若要中断合并,可使用命令 git merge --abort
  • 远程分支

    • 提交远程分支 git push --set-upstream origin <branch>
    • 删除远程分支 git push origin --delete <branch>

那么关于分支先说到这里,后面会介绍上篇提到的问题,怎样不提交当前分支内容还可以切换分支的问题,系列五 - stash 来解决这个问题。

系列文章传送门

Git 入门系列(一)- Git 概念/安装/基本操作/远程推送更新
Git 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系
Git 入门系列(三)- 分支(上)创建与切换 / 合并 / 查看 / 删除
Git 入门系列(四)- 分支(下)合并解决冲突 / 远程分支
Git 入门系列(五)- stash 贮藏
Git 入门系列(六)- 标签 tag
Git 入门系列(七)- 可视化 Git 管理工具
Git 入门系列(八) - FAQ

欢迎关注个人公众号,【程序媛春哥的手记】

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

推荐阅读更多精彩内容