持续创作,加速生长!这是我参加「日新计划 10 月更文应战」的第27天,点击查看活动概况

系列传送门

  • Git 入门系列(一)- Git 概念/装置/根本操作/长途推送更新
  • Git 入门系列(二)- 修正管理 / 吊销操作 / 指令及区间关系
  • Git 入门系列(三)- 分支(上)创立与切换 / 兼并 / 查看 / 删去
  • Git 入门系列(四)- 分支(下)兼并处理抵触 / 长途分支
  • Git 入门系列(五)- stash 贮藏
  • Git 入门系列(六)- 标签 tag
  • Git 入门系列(七)- 可视化 Git 管理工具
  • Git 入门系列(八) – FAQ

上一篇介绍了分支的用法,温故而知新,一起温习一下

  • 创立并切换新分支: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 入门系列(四)- 分支(下)合并解决冲突 / 远程分支

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

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

那么当兼并 feat_6 时, 就会发生抵触

git merge feat_6 兼并 feat_6 分支的内容

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

此时 Git 做了兼并,可是没有主动创立一个新的兼并提交,Git 会等候你去处理兼并发生的抵触(处于 MERGING 状况),经过git status查看因合抵触而处于未兼并(unmerged)状况的文件。

上图中,feat6.txt 是新建文件,没有抵触,无需处理;而 test.txt 文件兼并发生了抵触,需求处理

翻开 test 文件

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

上图表明: HEAD 所指示的版别(master 分支地点位置)在 ===== 的上半部分,而 feat_6 分支所指示的版别在 ===== 的下半部分。此时需求手动兼并这些内容,比方,保存两个分支的其间一个分支的内容,或许这两个改动都留着,把 <<<<<<< , ======= , 和 >>>>>>> 这些行删去即可

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

处理抵触之后,对文件运用 git add指令标记为抵触已处理

处理抵触也相当于修正,因此若要修正生效,相同需求 add – > commit 来完结兼并提交

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

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

中止兼并

在兼并过程中,假如想停止兼并,能够运用 git merge --abort 指令来简略地退出当时正在履行的兼并操作。

需求留意的是,这个指令仅在兼并后导致抵触时运用,也就是 MERGING 状况下。 git merge --abort 选项会测验恢复到你运转兼并前的状况。 但当运转指令前,在作业目录中有未储藏、未提交的修正时,在某些状况下将无法重现兼并前的状况。(特别是这些文件在兼并的过程中将会被修正时)

假如当时现已处于一个混乱的状况中,想从头操作,也能够运转 git reset --hard HEAD 回到之前的状况或许其他你想恢复的状况(将会铲除作业目录中 working dir 一切的内容,慎重运用) reset 的相关运用,可参阅Git 入门系列(二)

长途分支

仔细的朋友应该留意到了,当时的分支都是在本地创立的,假如要推送到长途上呢? 咱们回到 feat_6 分支,像向长途提交 commit 相同,运用 git push

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

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

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

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

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

GitHub 上也能够看到长途分支

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

删去长途分支

前面咱们说过删去分支是 git branch -d <branch>

删去长途分支运用 git push origin --delete <branch>

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

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

  • 兼并分支:假如有兼并发生抵触,处理抵触再提交即可,大多时候兼并会有三种状况

    • Git 快速兼并(没有抵触,不必处理,Git 直接兼并)
    • Git 主动创立兼并提交(没有抵触,不必处理,Git 主动兼并,并发生一次提交)
    • 发生抵触,处理兼并抵触并提交,若要中止兼并,可运用指令 git merge --abort
  • 长途分支

    • 提交长途分支 git push --set-upstream origin <branch>
    • 删去长途分支 git push origin --delete <branch>

那么关于分支先提到这儿,后面会介绍上篇提到的问题,怎样不提交当时分支内容还能够切换分支的问题,系列五 – stash 来处理这个问题。