记录对存储库的更改
此时,您应该在本地计算机上拥有一个真正的 Git存储库,并在您面前拥有其所有文件的签出或工作副本。通常,每当项目达到要记录的状态时,您就需要开始进行更改并将这些更改的快照提交到存储库中。
请记住,工作目录中的每个文件都可以处于以下两种状态之一:已跟踪或未跟踪。跟踪的文件是上一个快照中的文件;它们可以不修改,修改或上演。简而言之,跟踪文件是Git知道的文件。
未跟踪的文件就是所有其他内容-工作目录中不在上一个快照中且不在暂存区中的所有文件。第一次克隆存储库时,所有文件都会被跟踪和未修改,因为Git只是将它们签出,并且您还没有进行任何编辑。
在编辑文件时,Git会将其视为已修改,因为自上次提交以来已对其进行了更改。在工作时,您有选择地暂存这些已修改的文件,然后提交所有已暂存的更改,然后重复该循环。
图8.文件状态的生命周期。
检查文件状态
用于确定git status
命令处于哪个状态的主要工具。如果在克隆后直接运行此命令,则应看到类似以下内容的内容:
<span style="color:#333333"><code class="language-console">$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean</code></span>
这意味着您有一个干净的工作目录。换句话说,没有任何跟踪文件被修改。Git也看不到任何未跟踪的文件,否则它们将在此处列出。最后,该命令会告诉您您所在的分支,并告知您该分支尚未与服务器上的同一分支分开。现在,该分支始终是“ master”,这是默认设置。您在这里不必担心。 Git分支将详细介绍分支和参考。
假设您向项目中添加了一个新文件,即一个简单README
文件。如果该文件以前不存在,然后运行git status
,则会看到未跟踪的文件,如下所示:
<span style="color:#333333"><code class="language-console">$ echo 'My Project' > README
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
README
nothing added to commit but untracked files present (use "git add" to track)</code></span>
您可以看到新README
文件处于未跟踪状态,因为它位于状态输出中“未跟踪的文件”标题下。基本上,未跟踪意味着Git会看到您在上一个快照中没有的文件(提交);在您明确要求Git之前,Git不会开始将其包含在提交快照中。这样做是为了确保您不会意外地包括生成的二进制文件或其他您不想包含的文件。您确实想开始包含README
,因此让我们开始跟踪文件。
跟踪新文件
为了开始跟踪新文件,请使用命令git add
。要开始跟踪README
文件,可以运行以下命令:
$ git add README
如果再次运行status命令,则可以看到README
现在已跟踪文件并准备将其提交:
<span style="color:#333333"><code class="language-console">$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README</code></span>
您可以说它是分阶段的,因为它在“要更改的更改”标题下。如果此时提交,则在运行时文件的版本git add
就是后续历史快照中的版本。您可能还记得,当您git init
早先运行时,然后又运行了git add <files>
—那是为了开始跟踪目录中的文件。该git add
命令采用文件或目录的路径名;如果是目录,则该命令以递归方式添加该目录中的所有文件。
暂存修改的文件
让我们更改一个已经被跟踪的文件。如果更改了以前跟踪的文件CONTRIBUTING.md
,然后git status
再次运行命令,则会得到如下所示的内容:
<span style="color:#333333"><code class="language-console">$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README
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: CONTRIBUTING.md</code></span>
该CONTRIBUTING.md
文件将出现在名为“未暂存的更改未提交”的部分下-这意味着已跟踪的文件已在工作目录中被修改但尚未暂存。要登台,请运行git add
命令。 git add
是一个多用途命令-您可以使用它来开始跟踪新文件,暂存文件以及执行其他操作,例如将合并冲突的文件标记为已解决。将其更多地视为“将此内容精确地添加到下一个提交”而不是“将该文件添加到项目中”可能会有所帮助。git add
现在运行以暂存CONTRIBUTING.md
文件,然后git status
再次运行:
<span styl