第3章:版本控制入门:Git安装与配置、Git基本工作流、Git常用命令实战

好,咱们正式开始接触版本控制。说实话,在我刚入行做嵌入式那会儿,版本控制还是个「奢侈品」。那时候大家传代码靠U盘,文件名后面跟着_v1、_v2、_final、_final2……现在想想,那简直是噩梦。直到有一次,我把一个调试了三天的驱动文件覆盖错了,整个项目回退不了,差点没赶上交付。从那以后,我就彻底成了Git的忠实拥趸。

这一章,咱们就把Git从安装到常用命令捋一遍。你不需要一次性记住所有命令,但得理解它的工作流——说白了,就是「你改了代码,Git帮你记着,还能随时回去」。

3.1 Git的安装与配置

先搞定环境。Git的安装其实很简单,但不同平台有点小区别。

3.1.1 安装Git

  • Windows:去官网下载安装包,一路默认就行。我建议勾选「Git Bash Here」选项,这样右键就能打开命令行。
  • macOS:直接用Homebrew,brew install git,省心。
  • Linux:Ubuntu/Debian用sudo apt install git,CentOS用sudo yum install git

安装完验证一下:

git --version

能看到版本号,说明装好了。

3.1.2 配置用户信息

这是必须的一步。Git每次提交都会记录是谁干的,所以你得告诉它你是谁。

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

我个人习惯用公司邮箱,这样提交记录里能直接关联到人。你想想看,如果团队里有人提交代码后找不到人,那多麻烦。

小提示:git config --list 可以查看当前所有配置。如果只想改当前项目的配置,去掉 --global 就行。

3.1.3 配置SSH密钥(推荐)

如果你用GitHub、GitLab或者Gitee,我建议配一下SSH密钥。这样就不用每次输密码了。

ssh-keygen -t rsa -b 4096 -C "你的邮箱"

一路回车,生成后把公钥(~/.ssh/id_rsa.pub)的内容复制到平台的SSH设置里。嗯,这一步我当年折腾了半小时,后来发现其实就是复制粘贴的事。

3.2 Git基本工作流

理解了工作流,你才算真正入了门。Git的工作流其实就三个区域:

区域 说明
工作区(Working Directory) 你当前正在编辑的代码目录
暂存区(Staging Area) 你准备提交的改动,临时存放的地方
本地仓库(Local Repository) Git真正保存历史版本的地方

流程很简单:你在工作区改代码 → 把改动加到暂存区 → 提交到本地仓库。为什么要多一个暂存区?我刚开始也觉得多余,后来做项目时发现,有时候你改了好几个文件,但只想提交其中一部分。暂存区就是让你「挑着提交」的。

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

3.3 Git常用命令实战

命令不用背,多用几次就熟了。我挑几个最常用的,咱们直接上手。

3.3.1 初始化仓库

进入你的项目目录,执行:

git init

这会在当前目录下生成一个隐藏的.git文件夹。别删它,删了版本历史就全没了。我曾经有个同事,清理磁盘时顺手把.git删了……嗯,那天的气氛很凝重。

3.3.2 查看状态

这个命令我一天能用几十次:

git status

它会告诉你哪些文件被改了,哪些还没加到暂存区。说白了,就是你的「当前进度报告」。

3.3.3 添加文件到暂存区

git add 文件名        # 添加单个文件
git add .             # 添加所有改动

我个人习惯用git add .,但前提是我清楚自己改了什么。如果你不确定,最好一个一个加。

3.3.4 提交到本地仓库

git commit -m "提交说明"

提交说明要写清楚你干了什么。比如「修复了UART接收中断丢失问题」,而不是「改了点东西」。你想想看,三个月后你回来看提交记录,看到「改了点东西」是什么心情?

3.3.5 查看提交历史

git log

会显示所有提交记录,包括作者、时间、提交说明。加个--oneline参数,可以只看简略版:

git log --oneline

3.3.6 回退版本

这是Git最强大的功能之一。如果你发现最新提交有问题,可以回退:

git reset --hard HEAD~1   # 回退到上一个版本

注意,--hard会丢弃工作区的改动。如果你只是想撤销暂存区的文件,用git reset HEAD 文件名

警告: git reset --hard 会丢失未提交的改动。我曾经在调试时手滑执行了这个命令,结果一上午的代码全没了。从那以后,我每次回退前都会先 git stash 保存一下当前工作。

3.3.7 分支操作

分支是Git的精髓。你可以创建一条独立的分支来开发新功能,不影响主分支。

git branch 分支名        # 创建分支
git checkout 分支名      # 切换到分支
git checkout -b 分支名   # 创建并切换

合并分支:

git merge 分支名

我建议你养成一个习惯:主分支(mainmaster)永远保持稳定,新功能在分支上开发。这样即使出了问题,也不会影响主干。

3.3.8 远程仓库操作

如果你用GitHub或GitLab,需要把本地仓库和远程仓库关联起来。

git remote add origin 远程仓库地址
git push -u origin main   # 第一次推送
git pull                   # 拉取远程更新

嗯,这里要注意:git pull其实是git fetch + git merge的组合。如果你不想自动合并,可以先git fetch看看远程有什么变化,再手动合并。

3.4 避坑指南

最后分享几个我踩过的坑:

  • 不要直接修改.git文件夹里的内容——我见过有人手动删了里面的文件,结果仓库直接废了。
  • 提交前先git status——确认你只提交了想提交的文件,别把临时文件、编译产物也加进去了。
  • 写清晰的提交说明——这不是给别人看的,是给未来的自己看的。

好了,这一章的内容就这些。Git这东西,说白了就是个「后悔药」加「时光机」。你用得越多,越觉得它不可或缺。下一章咱们聊聊分支策略和团队协作,那才是真正体现Git威力的地方。