图解Git——分支的新建与合并《Pro Git》

⭐分支的新建与合并

先引入一个实际开发的工作流:

  1. 开发某个网站。
  2. 为实现某个新的需求,创建一个分支。
  3. 在这个分支上开展工作。

正在此时,你突然接到一个电话说有个很严重的问题需要紧急修补。你将按照如下方式来处理:

  1. 切换到你的线上分支(production branch)。
  2. 为这个紧急任务新建一个分支,并在其中修复它。
  3. 在测试通过之后,切换到线上分支,然后合并这个修补分支,最后改动推送到线上分支。
  4. 切换回你最初工作的分支,继续工作。

1. 新建分支

  1. 首先,模拟你正在你的项目上工作,并且在 master分支上已经有了一些提交:
    1. 提交历史图:
  1. 现在,你将解决项目中 #53 问题,需要创建一个分支并切换到该分支:git checkout -b iss53------(创建分支git branch iss53切换分支git checkout iss53 的简写):
    1. 创建并切换后:
  1. 在新创建的分支上工作并做提交后:git commit -a -m 'added a new footer [issue 53]'
    1. 提交 iss53 后:

  1. 需要紧急修复 BUG(hotfix)时:
    1. 检查工作目录暂存区 是否还存在未提交的修改:git status
    2. 切换回 master分支:git checkout master
    3. 建立 hotfix分支:git checkout -b hotfix
    4. 修复 Bug 后提交:git commit -a -m 'fixed the Bug'
    5. 提交后:
  1. 将修改后的 hotfix 分支合并到 master 分支:
    1. git checkout master:切换回 master 分支。

    2. git merge hotfix:合并 hotfix 分支。

    3. 这时会出现 Fast-forward: 在合并时,如果一个分支是另一个分支的直接后继,Git 会将指针直接向前推进,无需解决冲突,这种合并叫做"快进(fast-forward)"。

    4. 合并后,master 被快进到 hotfix

    5. 删除 hotfixgit branch -d hotfix

    6. 切换回工作分支--- iss53分支:git checkout iss53

    7. 完成 iss53 工作后提交:git commit -a -m 'finished the new footer [issue53]'

      1. 提交 issue53 后的历史记录图:


2. 合并分支

模拟你已经完成了 iss53 的全部工作,并打算将其合并到 master 分支。

  1. 切换到 master 分支并合并 iss53
    1. 合并前:

    2. git checkout master

    3. git merge iss53

    4. 合并后:

    5. 三方合并:当两个分支的提交历史分叉时,Git 需要做三方合并,使用两个分支的末端快照和公共祖先来合并。与快进合并不同,Git 会创建一个新的合并提交,它有多个父提交。

    6. 删除 iss53分支:git branch -d iss53


3. 遇到冲突时的合并分支

模拟合并时并不顺利,出现了冲突:对同一个文件的同一个部分进行了不同的修改,Git 就没法干净的合并它们。

复制代码
$ git merge iss53
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
  1. 查看冲突:使用 git status命令查看冲突的原因:

    $ git status
    On branch master
    You have unmerged paths.
    (fix conflicts and run "git commit")

    Unmerged paths:
    (use "git add <file>..." to mark resolution)

    复制代码
     both modified:      index.html

    no changes added to commit (use "git add" and/or "git commit -a")

  2. 解决冲突

    1. 打开有冲突的文件,Git 会在冲突部分插入特殊标记:

    <<<<<<< HEAD:index.html

    contact : email.support@github.com
    =======
    please contact us at support@github.com
    >>>>>>> iss53:index.html
    1. 你需要选择保留一个版本的内容,或合并两者的内容。解决后,删除冲突标记(<<<<<<<, =======, >>>>>>>)。
  1. 标记冲突已解决:
    1. git add将解决后的冲突标记为已解决:git add index.hmtl
  1. 完成合并并提交:
    1. git commit完成合并并提交。
    2. Git 会自动生成一个合并提交信息,例如:

    Merge branch 'iss53'
    Conflicts:
    index.html

  1. 使用图形化工具(可选):

    1. 如果需要,可以运行 git mergetool 启动图形化工具来帮助解决冲突:git mergetool

相关推荐
yeziyfx5 小时前
vs code 使用Git拉取/克隆(clone)仓库项目
git·vscode
smachao13 小时前
Redis Desktop Manager(Redis可视化工具)安装及使用详细教程
redis·git·bootstrap
szcsun514 小时前
git的常用命令
git
jian1105815 小时前
android studio 解决git用户名和用户邮箱不一致的问题
git
jian1105815 小时前
Mac git配置账号和邮箱,可以修改
git·macos
笨笨饿17 小时前
博客目录框架
c语言·开发语言·arm开发·git·嵌入式硬件·神经网络·编辑器
白玉cfc17 小时前
git协作开发
git·团队开发·远程工作
Rabbit_QL19 小时前
【CI/CD】02_一次 git push 后发生了什么?CI 是怎么工作的
git·ci/cd
不会写DN19 小时前
Git 开发中最常用的命令与场景
大数据·git·elasticsearch
张二娃同学20 小时前
基于 Python 与 Tkinter 的猜数字游戏设计与实现:支持玩家猜数与 AI 反向推理
开发语言·git·python·游戏·开源