通常,你会对文件做些修改,每当完成了一个阶段的目标,想要将记录下它时,就将它提交到到仓库。
工作目录下的每一个文件都只有两种状态:已跟踪 或 未跟踪。
已跟踪的文件是指那些被纳入了版本控制的文件,它们的状态可能是未修改,已修改或已放入暂存区。
初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态,因为 Git 刚刚检出了它们, 而你尚未编辑过它们,Git知优码系列文章讲解了Git使用基础技能。
现在我们基于第三篇文章的自建 Git 仓库进行操作。
一、Git版本控制
1. 检查当前文件状态
git status 命令查看哪些文件处于什么状态。
我们在自己建的仓库下执行 git status 输出如下:
$ git status
On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track)
分支名是“master”这是默认的分支名。
现在我们的工作区什么文件都没有,我们新建一个 hello.txt 文件。内容为空。
再次执行 git status 命令,输出如下:
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
hello.txt
nothing added to commit but untracked files present (use "git add" to track)
未追踪文件(Untracked files)下面列出了 hello.txt。表示我们新建的文件,处于未追踪的状态,即Git没有管理。
因为此时,我们只是进行了如下操作:文件夹下新建了一个文本文件。
2. 跟踪新文件
git add 命令,用于开始跟踪一个文件。
此时我们要追踪 hello.txt,则运行 git add hello.txt 命令。并查看文件状态。
$ git add hello.txt
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: hello.txt
此时 hello.txt 已被跟踪,并处于暂存状态,保存到了暂存区。文件的状态此时为已暂存(staged)。git add 是我们最常用的命令了吧。
git add 命令使用文件或目录的路径作为参数;如果参数是目录的路径,该命令将跟踪该目录下的所有文件。
3. 修改已追踪文件
hello.txt 已经加入了追踪,此时我们修改hello.txt,增加内容 hello world 并保存。
运行 git status 查看文件状态。
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: hello.txt
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: hello.txt
文件 hello.txt 出现在 Changes not staged for commit 这行下面,说明已跟踪文件的内容发生了变化,但还没有放到暂存区。
此时文件的状态为 已修改(modified)。
要暂存这次更新,需要运行 git add 命令。
这是个多功能命令:
3.1 可以用它开始跟踪新文件
3.2 把已跟踪的文件放到暂存区
3.3 还能用于合并时把有冲突的文件标记为已解决状态等。
再次执行 git add 命令,将本次的修改,放入暂存区。并查看文件状态。
$ git add hello.txt
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: hello.txt
这一步提醒我们,已追踪的文件,每次修改完毕后,都要进行一次 git add 操作,将文件放入暂存区。
4. git add的反操作。
git rm --cached 命令
对于我们已经追踪的文件,即已经git add过的文件,我们想撤销 git add 操作,应该怎么办。
此时应该执行git rm --cached 命令。我们将刚才已追踪的hello.txt从暂存区撤销,并查看文件状态。
$ git rm --cached hello.txt
rm 'hello.txt'
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
hello.txt
nothing added to commit but untracked files present (use "git add" to track)
此时,又回到了初始状态,等于我们刚刚新建了一个 hello.txt 文件,文件的状态为未追踪(Untracked)。
下图为文件的状态流转图:
总结:
这篇文章,我们练习了三个命令。
git status 命令查看哪些文件处于什么状态。
git add 命令,用于开始跟踪一个文件。
git rm --cached 命令,git add的反操作。