图解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. 删除 hotfix:git 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 ..." 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

    ======= >>>>>>> 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。

相关推荐
Demons_kirit7 小时前
CTFHub 信息泄露通关笔记:Git泄露 Log - 教程
笔记·git·网络安全
鬼手点金14 小时前
构建有效 Agent 的核心原则
java·人工智能·git·学习·自动化
索西引擎15 小时前
Git 大文件阻断推送的成因与历史重写修复
git
csdn2015_16 小时前
git 合并分支
大数据·git·elasticsearch
91440623217 小时前
mac Git 账户切换问题
git·macos
留岁17 小时前
Git 命令行学习记录
git·学习·elasticsearch
笨笨饿18 小时前
#142_VS Code.map文件插件的用法
git·python·stm32·单片机·嵌入式硬件·物联网·vim
鬼手点金19 小时前
如何选择模型
java·前端·人工智能·git·深度学习
余槐i19 小时前
Claude Code Skills 放对目录却不生效:插件启用顺序与缓存的三个坑
git·开发工具·ai agent·mcp·claude code
程序员差不多先生2 天前
Anthropic 用 5 个月重写了 Git:当 AI Agent 把版本控制系统逼到墙角
人工智能·git·elasticsearch·deepseek v4 pro·kimi k3·glm 5.3·qwen3.7 max