Git 分支完全指南:创建、切换与删除

学习在日常开发工作流中如何创建、切换、追踪、组织以及安全地删除 Git 分支。

Git 分支完全指南:创建、切换与删除

Git 分支让你可以在不干扰主线开发的情况下,处理某个功能、修复或实验。良好的分支习惯能让你的变更保持有序,并使代码审查、测试和回滚变得更加容易。

分支是轻量级的提交指针。这意味着创建、切换和删除它们非常快速,但你的选择仍然会影响项目历史的清晰度。

什么是 Git 分支

Git 分支是一个可移动的名称,指向某个提交。当你在分支上提交新工作时,Git 会将该分支名称向前移动到新的提交。

大多数项目都有一个主分支,例如 mainmaster。团队通常保持该分支稳定,然后为特定工作创建短期分支:

git switch -c fix-login-timeout

这会创建一个新分支并切换到它。较旧的 Git 示例可能使用:

git checkout -b fix-login-timeout

两种模式都很常见,但 git switch 更易读,因为它只关注分支的移动。

分支名称应该足够具体以说明工作内容。feature 太模糊了。feature/add-health-check-endpointfix/nginx-502-upstream-timeout 要好得多。清晰的名称能帮助你和审查者在打开任何文件之前理解分支的用途。

创建和切换分支

在创建分支之前,从正确的基点开始。对于大多数团队来说,这意味着首先更新你的主分支:

git switch main
git pull
git switch -c feature/add-metrics-endpoint

这降低了新分支从过时代码开始的可能性。它不能消除冲突,但能给你一个更干净的起点。

要列出本地分支,运行:

git branch

当前分支旁边会有一个星号。要同时查看远程分支,使用:

git branch -a

要切换到现有分支:

git switch branch-name

如果分支仅存在于远程,通常可以通过以下方式创建本地跟踪分支:

git switch --track origin/branch-name

跟踪很重要,因为它将你的本地分支与其远程对应分支连接起来。一旦设置了跟踪,像 git pullgit push 这样的简单命令就知道该使用哪个远程分支。

举一个具体的场景,假设你需要修补 Jenkins 管道故障,同时还要处理更大的 Docker 镜像清理工作。将这些更改放在不同的分支上。紧急修补可以快速审查和合并,而更大的清理工作可以继续进行而不受阻碍。

有关基础知识,请参阅 Git 仓库入门

保持分支有序

当分支开放时间过长或收集了不相关的更改时,它们会变得混乱。最好的分支通常是小的、专注的且易于审查的。

一个分支只用于一个目的:

  • 错误修复分支应包含修复和相关的测试。
  • 功能分支应包含该功能,而不是顺便进行的重构。
  • 清理分支应避免行为更改,除非这些更改明确是清理的一部分。

在推送之前,检查你的工作:

git status
git diff --staged

这可以捕获意外添加的文件和不相关的编辑。在 DevOps 仓库中尤其有用,因为生成的文件、本地配置和机密模板可能位于真实源文件附近。

当你的分支需要来自 main 的最新更改时,你有两个常见选项:

git merge main

或:

git rebase main

合并保留精确的分支历史。变基将你的分支提交重写到最新的基础之上。两者都很有用,但团队应在合并共享工作之前就期望使用哪种风格达成一致。如果不确定,请优先使用项目文档记录的工作流。

安全删除分支

删除旧分支可以让你的仓库更易于导航。在分支被合并后,使用以下命令删除本地副本:

git branch -d branch-name

小写的 -d 是更安全的选项。如果 Git 认为工作尚未合并,它会拒绝删除该分支。

如果你确实需要删除一个未合并的本地分支,使用:

git branch -D branch-name

请谨慎使用。即使提交未合并,它也会删除分支名称。这些提交可能在一段时间内通过 reflog 恢复,但你不应将其视为正常的安全网。

要删除远程分支:

git push origin --delete branch-name

仅在工作已合并、放弃或明确由你拥有时才删除远程分支。在共享团队中,远程分支可能被审查、部署预览或其他开发者使用。

你可以使用以下命令清理过时的远程跟踪引用:

git fetch --prune

这会删除本地对服务器上不再存在的远程分支的引用。它不会删除真正的远程分支。

何时询问队友

创建和切换分支是低风险操作。风险时刻在于删除未合并的工作、强制推送以及变基其他人可能正在使用的分支。

在强制推送到共享分支之前先询问。同样,在删除不是你创建的远程分支之前也要询问。在 CI/CD 密集的仓库中,一个分支可能触发构建、预览或部署规则,这些规则仅从 Git 本身来看并不明显。

良好的分支管理主要关乎清晰度。从正确的基点创建分支,以工作内容命名,保持专注,并在不再需要时删除它。这些习惯能让 Git 对你来说更易用,对整个团队来说更安全。