红茶的个人站点

  • 首页
  • 专栏
  • 开发工具
  • 其它
  • 隐私政策
Awalon
Talk is cheap,show me the code.
  1. 首页
  2. 开发工具
  3. 正文

Git 学习笔记 3:跟踪文件状态

2026年1月29日 5点热度 0人点赞 0条评论

工作区的文件有四个状态:

The lifecycle of the status of your files

图源:Git 官网

  • Untracked:新增的文件,尚未被 git 管理

  • Unmodified:文件内容与分支中的完全一致

  • Modified:UnModified 状态的文件被修改

  • Staged:文件被添加到暂存区,将会在下次提交(commit)时提交到分支

status

查看文件状态:

git status

如果输出:

❯ git status
On branch main
Your branch is up to date with 'origin/main'.
​
nothing to commit, working tree clean

表明工作区文件与分支一致,没有任何文件需要提交到分支。

如果在工作区新建一个文件:

❯ git status
On branch main
Your branch is up to date with 'origin/main'.
​
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        demo/src/main/java/cn/icexmoon/learngit/demo/MyController.java
​
nothing added to commit but untracked files present (use "git add" to track)

这表明存在一个未被跟踪(untracked)文件。

add

要提交这个文件到分支,需要先将它添加到暂存区(Stage Area):

git add demo/src/main/java/cn/icexmoon/learngit/demo/MyController.java

使用 git add . 可以方便的将当前目录和子目录下的新添加/修改的文件添加到暂存区。

再次查看文件状态:

❯ git status
On branch main
Your branch is up to date with 'origin/main'.
​
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   demo/src/main/java/cn/icexmoon/learngit/demo/MyController.java

如果添加错了,需要从缓存区撤销(保留工作区的副本),可以按照提示:

git restore --staged demo/src/main/java/cn/icexmoon/learngit/demo/MyController.java

也可以使用:

git rm --cached demo/src/main/java/cn/icexmoon/learngit/demo/MyController.java

效果是相同的,都会删除暂存区内的文件,让文件重新变为未跟踪的/未修改的/已修改的。

可以使用git status -s方便地查看文件变更情况:

image-20260129144856467

有四种情况:

  • 绿色的 M,文件有改变,并且已经被添加到暂存区(staged)

  • 红色的 M,文件有改变,但还未添加到暂存区(modified)

  • 绿色的 A,新增文件,并且已经被添加到暂存区(staged)

  • 红色的 ??,新增文件,没有被添加到暂存区(untracked)

diff

如果要查看有哪些工作区的内容已经修改,但还未添加到暂存区,可以:

git diff

image-20260129172713882

换言之,这个命令的用途是比较暂存区与工作区的差别。

如果要查看稍后执行提交时暂存区有哪些代码变更会提交到分支,可以:

git diff --staged

image-20260129173150857

commit

很常见的操作,用以下命令将暂存区的代码变更提交到分支:

git commit -m 'test'

每次修改工作区中的内容后都需要重新将其添加到暂存区,否则稍后的提交可能会不完整。这样做会显得有一些麻烦,因此 Git 提供一个更便利的操作:

git commit -a -m 'test'

这里的-a可以让 Git 执行提交时,将所有已经被跟踪的工作区文件添加到暂存区,并提交到分支。

注意,并不会包含新增文件(Untracked),需要显式添加到暂存区。

rm

Git 并不会自动跟踪文件的删除和移动,因此相应的操作需要通过 Git 命令显式执行。

第三方工具(比如 Idea 的 Git 插件)可以自动跟踪文件变化,可以省略这一步。

删除文件时,要分情况对待。如果文件已经被添加到暂存区,并且仅希望从暂存区删除而保留工作区的副本:

git rm --cached demo/src/main/java/cn/icexmoon/learngit/demo/MyController2.java

如果需要同时删除工作区和暂存区的文件:

git rm -f demo/src/main/java/cn/icexmoon/learngit/demo/MyController2.java

必须有-f参数,否则会报错。

如果该文件已经被提交到分支,删除操作会被记录到暂存区:

image-20260129175038386

稍后的提交操作会将分支上的文件删除。

mv

与rm类似,要让 GIt 跟踪文件移动,需要:

git mv demo/test.md demo/test2.md

这里相当于先将文件进行了复制,然后使用git rm删除文件,再通过git add添加副本。

The End.

参考资料

  • 2.2 Git基础 - 记录更改到仓库

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: git
最后更新:2026年1月29日

魔芋红茶

加一点PHP,加一点Go,加一点Python......

点赞
< 上一篇

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2021 icexmoon.cn. ALL RIGHTS RESERVED.
本网站由提供CDN加速/云存储服务

Theme Kratos Made By Seaton Jiang

宁ICP备2021001508号

宁公网安备64040202000141号