记录每次更新
有了仓库之后,日常工作就是:修改文件 → 查看状态 → 暂存 → 提交。本章介绍这一过程中最常用的命令。
查看状态:git status
git status 是你最常用的命令,它告诉你哪些文件处于什么状态:
git status
# On branch main
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
# hello.txt简洁模式输出更紧凑:
git status -s
# M README.md # 已修改,未暂存
# M lib/app.js # 已修改,已暂存
# MM src/index.js # 暂存后又修改了
# A new.txt # 新添加到暂存区
# ?? temp.log # 未跟踪左栏表示暂存区的状态,右栏表示工作区的状态。
跟踪与暂存:git add
git add 是一个多功能命令:它可以开始跟踪新文件、把已修改的文件放入暂存区,还能在合并时把有冲突的文件标记为已解决。
# 添加单个文件
git add hello.txt
# 添加多个文件
git add a.txt b.txt
# 添加某个目录
git add src/
# 添加当前目录下所有变更(包括新文件、修改和删除)
git add .
# 只添加已跟踪文件的修改和删除,不包括新文件
git add -u交互式暂存
如果一个文件里有多处修改,但你只想提交其中一部分,可以使用 -p(patch)参数逐块选择:
git add -p app.jsGit 会逐个显示修改块并询问你:y 暂存此块,n 跳过,s 拆分成更小的块,q 退出。
查看修改:git diff
git status 只告诉你哪些文件变了,git diff 告诉你具体改了什么:
# 工作区 与 暂存区 的差异(尚未暂存的修改)
git diff
# 暂存区 与 最近一次提交 的差异(即将提交的内容)
git diff --staged
# 工作区 与 最近一次提交 的差异
git diff HEAD
# 只看改了哪些文件
git diff --stat
# 比较两个提交或分支
git diff main feature提交更新:git commit
暂存区准备妥当后,就可以提交了:
git commit -m "新增用户登录功能"不带 -m 参数时,Git 会打开编辑器让你编写更详细的提交说明。好的提交说明一般这样组织:
新增用户登录功能
- 支持手机号 + 验证码登录
- 登录失败 5 次后锁定 10 分钟
Closes #42第一行是简短的摘要(建议不超过 50 个字符),空一行后写详细说明。
跳过暂存区
对于已经跟踪的文件,可以用 -a 参数跳过 git add,直接提交所有修改:
git commit -a -m "修复拼写错误"警告
-a不会包含未跟踪的新文件,同时也可能把你不想提交的修改一并带上,使用前最好先git status确认。
删除文件:git rm
要从 Git 中删除某个文件,需要从暂存区移除并提交:
# 删除文件,并从暂存区移除
git rm old.txt
# 只从 Git 中移除(停止跟踪),但保留工作区中的文件
git rm --cached config.local.json
# 递归删除目录
git rm -r logs/--cached 非常实用:当你不小心把不该提交的文件(如 node_modules、密钥文件)加入了版本控制,就可以用它停止跟踪,再把文件写进 .gitignore。
移动与重命名:git mv
git mv README.txt README.md它相当于依次执行:
mv README.txt README.md
git rm README.txt
git add README.mdGit 并不显式记录重命名操作,而是通过比较内容相似度自动识别。
一个完整的示例
# 1. 修改文件
echo "console.log('hello')" > index.js
# 2. 查看状态
git status -s
# ?? index.js
# 3. 暂存
git add index.js
# 4. 确认即将提交的内容
git diff --staged
# 5. 提交
git commit -m "添加入口文件"小结
| 命令 | 作用 |
|---|---|
git status | 查看文件状态 |
git add | 把修改加入暂存区 |
git diff | 查看具体修改内容 |
git commit | 把暂存区的内容提交到仓库 |
git rm | 删除文件 |
git mv | 移动或重命名文件 |
下一章学习如何查看提交历史。