Git 分支完全指南:创建、切换与删除
学习在日常开发工作流中如何创建、切换、追踪、组织以及安全地删除 Git 分支。
Git 分支完全指南:创建、切换与删除
Git 分支让你可以在不干扰主线开发的情况下,处理某个功能、修复或实验。良好的分支习惯能让你的变更保持有序,并使代码审查、测试和回滚变得更加容易。
分支是轻量级的提交指针。这意味着创建、切换和删除它们非常快速,但你的选择仍然会影响项目历史的清晰度。
什么是 Git 分支
Git 分支是一个可移动的名称,指向某个提交。当你在分支上提交新工作时,Git 会将该分支名称向前移动到新的提交。
大多数项目都有一个主分支,例如 main 或 master。团队通常保持该分支稳定,然后为特定工作创建短期分支:
git switch -c fix-login-timeout
这会创建一个新分支并切换到它。较旧的 Git 示例可能使用:
git checkout -b fix-login-timeout
两种模式都很常见,但 git switch 更易读,因为它只关注分支的移动。
分支名称应该足够具体以说明工作内容。feature 太模糊了。feature/add-health-check-endpoint 或 fix/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 pull 和 git 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 对你来说更易用,对整个团队来说更安全。