2. 版本控制基础:Git的安装与配置、Git常用命令、分支管理策略、标签与发布

好,咱们进入正题。版本控制这件事,说白了就是给代码上「后悔药」。我见过太多团队还在用「最终版_v12_打死不改版.zip」这种命名方式,每次看到都头皮发麻。Git 这东西,你一旦用顺了,就再也回不去了。

2.1 Git的安装与配置

安装 Git 其实没什么难度。Linux 用户直接 apt install git 或者 yum install git,Mac 用户用 brew install git,Windows 去官网下载安装包就行。嗯,这里要注意一点:Windows 安装时记得勾选「将 Git Bash 添加到右键菜单」,不然你后面会很不方便。

装完之后第一件事是什么?配置身份信息。我刚开始用 Git 时犯过一个低级错误——没配用户名,结果提交记录里显示的是「unknown」,后来查代码是谁写的全靠猜。

git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

我个人习惯还会配几个别名,省得每次敲长命令:

git config --global alias.st status
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.co checkout
小技巧: 如果你在公司用 Git,建议加上 git config --global core.autocrlf input。这能避免 Windows 和 Linux 换行符不一致导致的诡异问题。我曾经被这个坑过,一个文件明明没改,Git 却提示有改动,查了半天才发现是换行符在作怪。

2.2 Git常用命令

说实话,Git 命令上百个,但你日常用的就那么十几个。我列一下最核心的:

命令 作用 我的使用频率
git init 初始化仓库 每周1-2次
git clone 克隆远程仓库 每天
git add 暂存文件 每天几十次
git commit -m 提交到本地仓库 每天十几次
git push 推送到远程 每天几次
git pull 拉取远程更新 每天几次
git log 查看提交历史 每天
git diff 查看文件差异 每天

你想想看,这些命令其实就覆盖了 90% 的日常操作。我特别想强调 git diff 这个命令——很多人提交前不看改了啥,直接 git add . 然后 git commit,结果把调试代码也提交上去了。我的习惯是:提交前一定先 git diff 看一眼,确认无误再提交。

核心工作流: 工作区 → git add → 暂存区 → git commit → 本地仓库 → git push → 远程仓库

2.3 分支管理策略

分支管理是 Git 的精髓。我见过两种极端:一种是不用分支,所有人都在 master 上改,天天冲突;另一种是分支多到数不清,合并时根本不知道哪个是哪个。

我个人推荐的是 Git Flow 的简化版,适合中小团队:

  • master 分支: 只放稳定版本,永远可部署。谁往 master 上直接 push 代码,我建议请他喝咖啡聊聊人生。
  • develop 分支: 日常开发的主分支。所有功能分支都从这里拉出去,合并回来。
  • feature 分支: 从 develop 拉出来,开发完再合并回去。命名规范:feature/xxx。
  • release 分支: 准备发布时从 develop 拉出来,只修 bug,不加新功能。
  • hotfix 分支: 线上出紧急 bug 时,从 master 拉出来修,修完合并回 master 和 develop。
避坑指南: 我曾经在一个项目里,有人直接在 master 上修 bug,修完忘了合并回 develop。结果下次发布时,那个 bug 又出现了。嗯,从那以后我定了个规矩:master 只接受合并请求,不接受直接 push。

分支操作的核心命令:

# 创建并切换到新分支
git checkout -b feature/new-feature

# 查看所有分支
git branch -a

# 合并分支
git checkout develop
git merge feature/new-feature

# 删除分支(合并后清理)
git branch -d feature/new-feature

2.4 标签与发布

标签这东西,说白了就是给某个提交打个「记号」。我习惯在每次发布版本时打一个标签,这样以后想回滚到某个版本,直接 git checkout v1.2.3 就行,不用去翻 commit id。

标签有两种:轻量标签和附注标签。我个人只用附注标签,因为它包含了作者、日期、签名信息,更靠谱。

# 创建附注标签
git tag -a v1.0.0 -m "正式发布 v1.0.0 版本"

# 查看所有标签
git tag -l

# 推送标签到远程
git push origin v1.0.0

# 推送所有标签
git push origin --tags

版本号怎么定?我推荐语义化版本规范:

版本格式 含义 示例
主版本号 不兼容的 API 修改 v2.0.0
次版本号 向下兼容的功能新增 v1.3.0
修订号 向下兼容的问题修正 v1.3.1
我的习惯: 每次发布前,我会先更新 CHANGELOG.md 文件,记录这次改了什么。然后打标签、推送到远程。这样团队成员一看 CHANGELOG 就知道每个版本的变化,不用去翻 commit 记录。

最后说一句:版本控制不是银弹,但它能帮你省下大量「找代码、问同事、猜改动」的时间。把 Git 用好了,你的自动更新服务器搭建之路就稳了一半。