跳转到内容

1.5 分支的应用


Git 分支本质上是一个指向某一次提交(Commit)的轻量级可移动指针。默认的主分支通常被称为 mainmaster

  • 隔离开发: 分支让您可以从项目的某个稳定点分叉出去,安全地进行新的或有风险的更改。
  • 快速切换: Git 可以在分支之间即时切换,在不同的工作内容之间高效移动。

使用 git branch 命令可以基于您当前所在的分支创建一个新的分支。

Terminal window
git branch <new-branch-name>
# 示例:
git branch feature/new-ui

注意: git branch 只是创建了指针,您当前的工作目录并没有切换过去。

要将您的工作目录切换到新的分支,并开始在新分支上工作,请使用 git switch(推荐)或 git checkout(传统)命令。

Git 2.23+ 推荐使用 git switch 来进行分支切换,意图更清晰:

Terminal window
git switch feature/new-ui

最常用且效率最高的方法是使用带 -c 选项的 git switch 命令。这会创建新分支并立即切换到它

Terminal window
git switch -c <new-branch-name>
# 或传统命令:
# git checkout -b <new-branch-name>

使用 git branch 命令可以查看当前所有分支,当前分支会以绿色显示。

Terminal window
git branch
# 示例输出:
# main
# * feature/new-ui

当您在一个分支上完成了功能开发或错误修复后,需要将这些更改带回主线分支(通常是 main)。这一操作通过 git merge 命令实现。

  1. 切换到目标分支: 首先切换到您希望接受更改的分支(即您要合并到哪个分支)。
    Terminal window
    git switch main
  2. 执行合并: 将您的特性分支合并到当前分支中。
    Terminal window
    git merge feature/new-ui

Git 在执行合并时,会根据分支历史自动选择最合适的策略:

  • 快进式合并 (Fast-forward): 如果目标分支(如 main)自您创建特性分支以来没有新的提交,Git 会直接移动指针。不会产生新的合并提交,历史保持线性。
  • 三方合并 (Three-way Merge): 如果目标分支新的提交,Git 会基于两个分支的共同祖先,创建一个新的合并提交 (Merge Commit) 来记录两个分支的历史交汇。

当您尝试合并两个分支时,如果它们在同一个文件的同一行代码做了不同的修改,Git 无法自动决定保留哪一个,便会触发合并冲突

  1. Git 提示冲突: 在执行 git merge 后,Git 会暂停合并,并在冲突文件中插入特殊标记来指示冲突区域。
    • <<<<<<< HEAD: 标记当前分支(目标分支)的内容。
    • =======: 分隔符。
    • >>>>>>> <branch-name>: 标记传入分支(源分支)的内容。
  2. 手动编辑: 打开冲突文件,手动选择并保留您需要的代码部分,同时删除所有 Git 冲突标记。
  3. 暂存并提交: 解决所有冲突后,您需要使用 git add 将冲突文件标记为已解决,然后执行 git commit 来完成合并提交。

一旦特性分支的工作已经成功合并到主线分支并推送到远程,为了保持仓库的历史清晰和整洁,您应该删除该特性分支。

操作命令描述
删除本地分支git branch -d <branch-name>安全删除。如果分支的工作尚未完全合并,Git 会发出警告,拒绝删除。
强制删除本地分支git branch -D <branch-name>强制删除。用于丢弃未合并的工作或确实不需要保留的分支。
删除远程分支git push origin --delete <branch-name>通知远程服务器清除该分支。

Powered by Namyki