跳到正文

我所理解的 Git 最佳实践

Git 是开发工作中必备的一个环节,但对于「个人怎么用合适」「团队怎么管理 Git 规范」,每个人的思路都不太一样。在这里我把我摸索出来的最佳实践分享出来,供大家参考。

由于篇幅问题,全文分成 10 部分来讲。前五篇从一次日常改动讲到提测和合入主干,后五篇处理仓库归属、备份和历史维护,以及跨平台检出。

第一篇《从工作区到一条可审阅的提交》从提交标题和正文讲起,再用同一文件里的修复和日志演示怎样分批暂存、核对索引,以及为什么要按行为拆分提交。

第二篇《什么时候用 rebase,什么时候用 merge》用同一个分叉对照 rebase 和 merge。自己维护的功能分支可以重放提交,已经成为团队开发基线的分支要保留原有提交。

第三篇《利用 amend 和 rebase 保持提交简洁》讲怎样用 amend 和交互式 rebase 整理过 CI、部署和提测时留下的提交。分支已经推送时,还要知道何时可以用显式 lease 更新远端。

第四篇《在 GitHub 和 GitLab 配置 PR 的合入方式》用同一个有三条提交的变更,对照两个平台的合入选项、squash 配置和主干结果,再把团队约定落实到分支保护和 CI。

第五篇《共享测试分支与按需求部署》跟着 A、B 两个需求从提测走到单独上线。A squash 到主干后,B 为什么仍不能让共享测试分支快进,以及哪些变化需要重新验证,都可以从实际的合入关系看出来。

第六篇《弄清工作树、嵌套仓库和远端的归属》从一个工具目录带着自己的 .git 说起。用 Git 的顶层路径、索引和远端配置判断自己在改哪个仓库,再讨论什么时候保留独立历史、什么时候把源码纳入主仓库,以及怎样用 worktree 隔离并行任务。

第七篇《没有远端时怎样用 Git 维护项目》从本地提交、分支和标签写起,再按恢复需要选择普通压缩包、git archive 或 git bundle,并实际核对独立恢复的结果。

第八篇《为什么切到 orphan 分支后源码不见了》解释 orphan 切换怎样改变工作树和下一次暂存的输入,以及如何复用已验证的文件树重建根提交、给远端更新留好恢复点。

第九篇《先量清仓库体积,再决定怎么迁移》把当前快照、旧历史和推送限制分开测量,再按结果选择清理大文件、迁移 LFS 对象、重写历史或分批推送。

第十篇《用 Node.js 检查 Git 路径,提前发现 Windows 检出问题》从 Windows 的检出报错和大小写冲突讲起,用 Node.js 读取 Git 索引检查路径,并给出 Husky 接法和 Python pre-commit 的对照。