Git基本操作(二):add与commit,把文件交给Git管理

1. 问题场景

你已经在一个文件夹里执行了 git init,建好了仓库。接着在里面写了一个 README.txt 文件,满心欢喜地以为 Git 已经在帮你记录了。但实际上,这时候 Git 还不知道这个文件的存在。怎么才能让 Git 正式接手,开始跟踪文件的变化?这就是 git add 和 git commit 要做的事。

2. 核心命令

  • git add <文件名>

    将指定文件从工作区添加到暂存区。相当于告诉 Git:"这个文件的改动我准备保存了"。

  • git add .

    将当前目录下所有 改动(新增、修改、删除)一次性全部添加到暂存区。使用前要确认一下 git status,避免把不该提交的文件一并加进去。

  • git commit -m "提交说明"

    将暂存区里的所有内容打包成一个历史快照,永久存入版本库。-m 后面的双引号里是本次提交的简要描述,必须写,而且要写清楚。

3. 实战演示

我们继续用上一篇创建的 myproject 仓库来演示。如果你还没有这个仓库,就新建一个并初始化。

3.1 第一次提交

进入仓库目录,创建一个 ReadMe 文件并写入两行内容:

bash 复制代码
$ cd myproject
$ echo "hello git" > ReadMe
$ echo "hello git again" >> ReadMe

用 cat 看一眼文件内容确认:

bash 复制代码
$ cat ReadMe
hello git
hello git again

现在用 git add 把文件加入暂存区:

bash 复制代码
$ git add ReadMe

这一步没有任何输出,通常意味着成功了。接着执行 git commit:

bash 复制代码
$ git commit -m "My first commit: add ReadMe file"
[master (root-commit) c614289] My first commit: add ReadMe file
 1 file changed, 2 insertions(+)
 create mode 100644 ReadMe

输出信息告诉我们:这次提交生成了一串 commit id(这里是 c614289,你的会不同),修改了一个文件,新插入了两行内容。

3.2 提交说明怎么写

-m 后面的提交说明不是随便写写的,它和代码一样重要。一个好的提交说明能让半年后的你自己或同事立刻明白这次提交做了什么。一般建议用英文简明扼要,格式可以统一为"动词 + 名词短语",比如:

  • add user login module
  • fix bug in payment calculation
  • update README with install steps

如果一次提交改了太多东西,说明你的提交粒度太大了,尽量让一次提交只做一件逻辑完整的事。

3.3 多次 add,一次 commit

暂存区的存在让你可以分几次把不同的文件加入,最后一次性提交。比如,在 myproject 里再新建两个文件:

bash 复制代码
$ touch file1.txt file2.txt

分开添加,然后一起提交:

bash 复制代码
$ git add file1.txt
$ git add file2.txt
$ git commit -m "add two new files"
[master 0a3b7d2] add two new files
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file1.txt
 create mode 100644 file2.txt

也可以直接用 git add file1.txt file2.txt 一次加多个,或者用 git add . 把所有新增文件都加上。但 git add . 范围比较宽,建议先在提交前用 git status 看一眼到底加了哪些文件。

4. 查看状态与差异

这两个命令在你日常使用中的频率可能比 commit 本身还要高。

4.1 git status ------ 看状态

随时执行它,Git 会告诉你三件事:工作区里有未暂存的修改吗?暂存区里有待提交的内容吗?有哪些文件还没被跟踪?

bash 复制代码
$ git status
On branch master
nothing to commit, working tree clean

当工作区和暂存区都干净时,输出如上。如果你修改了 ReadMe 但还没 add,会显示:

bash 复制代码
$ echo "a new line" >> ReadMe
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   ReadMe

no changes added to commit (use "git add" and/or "git commit -a")

Git 会明确提示你哪些文件被修改了,并且告诉你下一步可以怎么做。

4.2 git diff ------ 看具体改了什么

git status 只告诉你"有改动",git diff 会展示出具体的改动内容。不加参数时,它比较的是工作区 和暂存区(如果暂存区为空,就是和最新一次提交比较)。

bash 复制代码
$ git diff
diff --git a/ReadMe b/ReadMe
index e69de29..3b18e51 100644
--- a/ReadMe
+++ b/ReadMe
@@ -2,2 +3,3 @@
 hello git
 hello git again
+a new line

前面带 + 的绿色行是新增的,带 - 的红色行是删除的(这里没有)。这个输出格式看起来很原始,但习惯之后非常高效。

5. 注意事项

  • 正确流程是固定的 :修改文件 → git add → git commit。跳过 add 直接 commit,Git 什么都不会提交。
  • git add . 要谨慎 :它会把所有改动一次加进去,很容易把调试用的临时文件、本地配置等不该提交的东西也卷进去。建议先 git status 看一眼,再用 git add 精确指定文件,或者用 .gitignore 过滤(后面会讲)。
  • commit id 是唯一标识 :每一次提交都有一个独一无二的 hash 值(如 c614289),它是你回溯版本时的钥匙。不需要记完整,Git 允许只取前几位。

6. 要点总结

  • git add 是把修改从工作区放入暂存区的动作,相当于"挑选"。
  • git commit -m "说明" 是把暂存区的内容正式存入版本库,形成历史节点。
  • 日常工作流就三个动作:修改 → add → commit。
  • git status 是使用频率最高的命令,随时用它来掌握当前仓库状态。
  • 提交说明要写清楚,为未来的自己和协作者负责。

7. 练习题

  1. 进入上一篇创建的 learning-git 仓库,新建一个文本文件 notes.txt,写入任意内容。
  2. 用 git add 添加该文件,然后用 git commit 提交,提交说明要清晰。
  3. 再创建两个文件 a.txt 和 b.txt,练习多次 add、一次 commit。
  4. 修改 notes.txt,然后分别在 add 前和 add 后运行 git status 和 git diff,观察输出变化。
  5. 故意不 add 就执行 git commit,看看 Git 会给出什么提示。

相关推荐
Winlifes3 天前
我给 Codex 做了一个 Git 面板:分支树、提交历史和工作区操作
git
郑州光合科技余经理4 天前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
我命由我123454 天前
Git 推送报错:error: src refspec main does not match any
运维·git·gitee·github·运维开发·学习方法·版本控制
Lcr3s4 天前
Git基础之(0):如何在Ubuntu(Linux)上安装git
git
玄芯散人5 天前
【筑基·058】Git协作工作流:冲突解决和PR流程
git·版本控制·团队协作
寺中人5 天前
Git 版本控制完全入门指南:从安装到实战,提交 + 分支 + 协作 + 冲突解决全拆解
git·开发工具·版本控制·团队协作·代码管理
荔枝梅梅5 天前
新手程序员 SSH 第一课:从 Git 仓库连接失败理解 SSH 协议与密钥配置
git
玄芯散人5 天前
【筑基·057】Git代码时光机:版本控制入门到分支管理
git·版本控制·嵌入式开发
szephyr5 天前
Git 分支管理实战:feature/release/hotfix 怎么用才不乱
git·分支管理·团队协作·工作流·hotfix
一木 之林5 天前
手搓家庭服务器:二手装机、Docker部署、端口映射与frp内网穿透
服务器·人工智能·git·编辑器