1.5 分支的应用
🌳 什么是分支 (Branch)?
Section titled “🌳 什么是分支 (Branch)?”Git 分支本质上是一个指向某一次提交(Commit)的轻量级可移动指针。默认的主分支通常被称为 main 或 master。
- 隔离开发: 分支让您可以从项目的某个稳定点分叉出去,安全地进行新的或有风险的更改。
- 快速切换: Git 可以在分支之间即时切换,在不同的工作内容之间高效移动。
🏷️ 分支的创建、切换与查看
Section titled “🏷️ 分支的创建、切换与查看”使用 git branch 命令可以基于您当前所在的分支创建一个新的分支。
git branch <new-branch-name># 示例:git branch feature/new-ui注意:
git branch只是创建了指针,您当前的工作目录并没有切换过去。
要将您的工作目录切换到新的分支,并开始在新分支上工作,请使用 git switch(推荐)或 git checkout(传统)命令。
Git 2.23+ 推荐使用 git switch 来进行分支切换,意图更清晰:
git switch feature/new-ui传统的 git checkout 命令也可用于切换分支,但它也用于恢复文件,命令含义较复杂:
git checkout feature/new-ui创建并切换 (一步到位)
Section titled “创建并切换 (一步到位)”最常用且效率最高的方法是使用带 -c 选项的 git switch 命令。这会创建新分支并立即切换到它。
git switch -c <new-branch-name>
# 或传统命令:# git checkout -b <new-branch-name>使用 git branch 命令可以查看当前所有分支,当前分支会以绿色显示。
git branch# 示例输出:# main# * feature/new-ui🤝 合并分支 (Merging)
Section titled “🤝 合并分支 (Merging)”当您在一个分支上完成了功能开发或错误修复后,需要将这些更改带回主线分支(通常是 main)。这一操作通过 git merge 命令实现。
执行合并的步骤
Section titled “执行合并的步骤”- 切换到目标分支: 首先切换到您希望接受更改的分支(即您要合并到哪个分支)。
Terminal window git switch main - 执行合并: 将您的特性分支合并到当前分支中。
Terminal window git merge feature/new-ui
两种合并类型
Section titled “两种合并类型”Git 在执行合并时,会根据分支历史自动选择最合适的策略:
- 快进式合并 (Fast-forward):
如果目标分支(如
main)自您创建特性分支以来没有新的提交,Git 会直接移动指针。不会产生新的合并提交,历史保持线性。 - 三方合并 (Three-way Merge): 如果目标分支有新的提交,Git 会基于两个分支的共同祖先,创建一个新的合并提交 (Merge Commit) 来记录两个分支的历史交汇。
❌ 分支冲突与删除
Section titled “❌ 分支冲突与删除”解决合并冲突 (Conflicts)
Section titled “解决合并冲突 (Conflicts)”当您尝试合并两个分支时,如果它们在同一个文件的同一行代码做了不同的修改,Git 无法自动决定保留哪一个,便会触发合并冲突。
- Git 提示冲突: 在执行
git merge后,Git 会暂停合并,并在冲突文件中插入特殊标记来指示冲突区域。<<<<<<< HEAD: 标记当前分支(目标分支)的内容。=======: 分隔符。>>>>>>> <branch-name>: 标记传入分支(源分支)的内容。
- 手动编辑: 打开冲突文件,手动选择并保留您需要的代码部分,同时删除所有 Git 冲突标记。
- 暂存并提交: 解决所有冲突后,您需要使用
git add将冲突文件标记为已解决,然后执行git commit来完成合并提交。
一旦特性分支的工作已经成功合并到主线分支并推送到远程,为了保持仓库的历史清晰和整洁,您应该删除该特性分支。
| 操作 | 命令 | 描述 |
|---|---|---|
| 删除本地分支 | git branch -d <branch-name> | 安全删除。如果分支的工作尚未完全合并,Git 会发出警告,拒绝删除。 |
| 强制删除本地分支 | git branch -D <branch-name> | 强制删除。用于丢弃未合并的工作或确实不需要保留的分支。 |
| 删除远程分支 | git push origin --delete <branch-name> | 通知远程服务器清除该分支。 |
Powered by Namyki