4. Git基本操作:从零开始的版本控制
说实话,Git的基本操作就像学骑自行车——刚开始觉得别扭,一旦上手就再也离不开了。我带过不少团队,发现很多人卡在第一步:不知道什么时候该用什么命令。今天我就把这几个最常用的命令掰开揉碎了讲清楚。
4.1 git init:创建你的第一个仓库
git init 说白了就是告诉Git:「嘿,这个文件夹我要管起来了!」。执行后,Git会在当前目录下创建一个隐藏的 .git 文件夹,里面装着所有版本信息。
核心用法:
# 在当前目录初始化
git init
# 在指定目录初始化
git init my-project
我个人习惯在项目一开始就执行 git init。为什么?因为越早开始版本控制,越不容易丢失代码。我曾经见过一个同事写了三天代码,结果硬盘坏了,整个人都懵了——嗯,从那以后我再也不敢拖延初始化了。
小技巧:初始化后立刻创建一个 .gitignore 文件,把 node_modules、.env 这类不需要版本控制的文件排除掉。省得后面手忙脚乱。
4.2 git clone:把远程仓库拉下来
你想想看,团队协作时,别人已经把代码推到了远程仓库,你怎么拿到?git clone 就是干这个的。
# 克隆HTTPS地址
git clone https://github.com/user/repo.git
# 克隆SSH地址(推荐)
git clone git@github.com:user/repo.git
# 克隆并指定本地目录名
git clone https://github.com/user/repo.git my-folder
我在项目中遇到过一个问题:新手经常分不清 clone 和 fork。简单说,clone 是把别人的仓库完整复制到本地,fork 是在GitHub上复制一份到自己的账户下。两者经常配合使用。
注意:克隆下来的仓库会自动关联远程仓库,别手贱去改 .git/config 里的URL,除非你真的知道在做什么。
4.3 git add:把文件放进暂存区
这个命令我经常跟新手说:「git add 就像去超市购物,你把想买的东西先放进购物车。」只有放进购物车(暂存区)的文件,才会被记录到下一次提交中。
# 添加单个文件
git add index.html
# 添加所有文件(小心使用)
git add .
# 添加当前目录所有 .js 文件
git add *.js
# 交互式添加(推荐)
git add -p
我个人强烈推荐 git add -p 这个交互模式。它会逐块询问你是否要暂存修改。有一次我在一个文件里同时改了bug和加了新功能,用 -p 把它们分成了两次提交——后来回溯问题时,这个习惯救了我一命。
4.4 git commit:保存一个版本快照
git commit 就是「结账走人」。你把购物车里的东西(暂存区的文件)正式保存成一个版本。每个commit都有一个唯一的SHA-1哈希值,就像身份证号。
# 基本提交
git commit -m "修复登录页面的样式问题"
# 跳过暂存区,直接提交已跟踪的文件
git commit -a -m "更新README文档"
# 修改最后一次提交(还没推送时)
git commit --amend -m "更准确的提交信息"
提交信息规范(我团队的标准):
| 类型 | 格式 | 示例 |
|---|---|---|
| 新功能 | feat: 描述 | feat: 添加用户注册功能 |
| 修复bug | fix: 描述 | fix: 修复空指针异常 |
| 文档 | docs: 描述 | docs: 更新API文档 |
| 重构 | refactor: 描述 | refactor: 提取公共方法 |
我曾经犯过一个错误:提交信息写的是「修改了一些东西」。三个月后回看,完全想不起来改了啥。从那以后,我要求团队所有提交信息必须能让人一眼看懂改动意图。
4.5 git status:随时查看仓库状态
这个命令我一天能用几十次。它告诉你三件事:哪些文件被修改了、哪些在暂存区、哪些还没被跟踪。
# 查看完整状态
git status
# 简洁模式(推荐)
git status -s
git status -s 的输出非常清爽:
M README.md # 已修改,未暂存
A index.html # 已暂存
?? new-file.js # 未跟踪
你想想看,如果不经常看状态,很容易出现「我以为提交了,其实没有」的尴尬情况。我建议每次执行 git commit 前,先跑一遍 git status 确认一下。
4.6 git log:查看提交历史
git log 就像项目的日记本,记录了每一次提交的详细信息。默认输出很详细,但实际工作中我们常用各种参数来定制显示。
# 标准日志
git log
# 一行显示(最常用)
git log --oneline
# 图形化显示分支
git log --graph --oneline --all
# 显示最近3条
git log -3
# 显示某个文件的修改历史
git log --follow index.html
我的日常组合:
# 别名配置(加到 ~/.gitconfig)
[alias]
lg = log --graph --oneline --all --decorate
# 使用
git lg
这样看分支结构一目了然,比默认输出舒服多了。
4.7 实战:一个完整的开发流程
说了这么多,咱们串起来走一遍。假设你要开始一个新功能:
# 1. 克隆项目
git clone git@github.com:team/project.git
# 2. 创建功能分支
git checkout -b feature/login
# 3. 修改代码后,查看状态
git status
# 4. 添加文件到暂存区
git add src/login.js src/login.css
# 5. 提交
git commit -m "feat: 实现登录页面UI"
# 6. 查看提交历史
git log --oneline -3
这个流程我每天至少走十几遍。刚开始可能会觉得繁琐,但习惯后你会发现——每一步都在保护你的代码安全。
避坑指南:
- 别在
git add .后直接提交——先git status确认一下 - 提交信息别写「update」「fix bug」这种废话——三个月后你自己都看不懂
- 频繁提交,小步快跑——别攒了一周代码才提交一次
好了,Git基本操作就这些。说白了就是三板斧:add、commit、status。把这几个命令练熟,日常开发就够用了。下一章我们聊聊分支管理——那才是Git真正强大的地方。