Git中文社区

记录每次更新

有了仓库之后,日常工作就是:修改文件 → 查看状态 → 暂存 → 提交。本章介绍这一过程中最常用的命令。

查看状态: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.js

Git 会逐个显示修改块并询问你: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.md

Git 并不显式记录重命名操作,而是通过比较内容相似度自动识别。

一个完整的示例

# 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移动或重命名文件

下一章学习如何查看提交历史。