记录每次更新到仓库
工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪。
已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改,已修改或已放入暂存区。
工作目录中除已跟踪文件以外的所有其它文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有放入暂存区。
检查当前文件状态
要查看哪些文件处于什么状态,可以用 git status 命令。
如果在克隆仓库后立即使用此命令,会看到类似这样的输出:
这说明你现在的工作目录相当干净。所有已跟踪文件在上次提交后都未被更改过。
此外,上面的信息还表明,当前目录下没有出现任何处于未跟踪状态的新文件,否则 Git 会在这里列出来。
该命令还显示了当前所在分支,并告诉你这个分支同远程服务器上对应的分支没有偏离。 现在,分支名是 “master”,这是默认的分支名。
在项目下创建一个新的 README 文件。
如果之前并不存在这个文件,使用 git status 命令,你将看到一个新的未跟踪文件:
在状态报告中可以看到新建的 README 文件出现在 Untracked files 下面。 未跟踪的文件意味着 Git 在之前的快照(提交)中没有这些文件;Git 不会自动将之纳入跟踪范围,除非你明明白白地告诉它“我需要跟踪该文件”, 这样的处理让你不必担心将生成的二进制文件或其它不想被跟踪的文件包含进来。
跟踪新文件
使用命令 git add 开始跟踪一个文件。
所以,要跟踪 README 文件,运行:
此时再运行 git status 命令,会看到 README 文件已被跟踪,并处于暂存状态:
只要在 Changes to be committed 这行下面的,就说明是已暂存状态。
git add 命令使用文件或目录的路径作为参数;如果参数是目录的路径,该命令将递归地跟踪该目录下的所有文件。
暂存已修改文件
修改一个已被跟踪的文件。
修改 README 文件,然后运行 git status 命令。
文件 README 出现在 Changes not staged for commit 这行下面,说明已跟踪文件的内容发生了变化,但还没有放到暂存区。
要暂存这次更新,需要运行 git add 命令。这是个多功能命令:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等。
现在运行 git add 将 README 放到暂存区,然后再看看 git status 的输出:
文件已暂存,下次提交时就会记录到仓库。
此时再加条注释, 重新编辑存盘后,再运行 git status
现在 README 文件同时出现在暂存区和非暂存区,实际上 Git 只不过暂存了你运行 git add 命令时的版本, 如果你现在提交,CONTRIBUTING.md 的版本是你最后一次运行 git add 命令时的那个版本,而不是你运行 git commit 时,在工作目录中的当前版本。 所以,运行了 git add 之后又作了修订的文件,需要重新运行 git add 把最新版本重新暂存起来:
状态简览
git status 命令的输出十分详细,但其用语有些繁琐。 如果你使用 git status -s 命令或 git status --short 命令,你将得到一种更为紧凑的格式输出。 运行 git status -s ,状态报告输出如下:
M:修改过的文件。右M 表示修改过的文件还没放入暂存区,左M 表示该文件被修改了并放入了暂存区
A:新添加到暂存区中的文件
AM:添加到暂存区中的文件被修改过还没放入暂存
??:新添加的未跟踪文件
提交更新
暂存区域已经准备妥当可以提交了。 在此之前,请一定要确认还有什么修改过的或新建的文件还没有 git add 过,否则提交的时候不会记录这些还没暂存起来的变化。这些修改过的文件只保留在本地磁盘。 所以,每次准备提交前,先用 git status 看下,是不是都已暂存起来了, 然后再运行提交命令 git commit:
$ git commit
提交后它会告诉你,当前是在哪个分支(master)提交的,本次提交的完整 SHA-1 校验和是什么(52cc71d),以及在本次提交中,有多少文件修订过,多少行添加和删改过。
跳过使用暂存区域
在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤:
提交之前不再需要 git add 文件了
移除文件
要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。
可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。
想把文件从 Git 仓库中删除(亦只从暂存区域移除),但仍然希望保留在当前工作目录中。使用 --cached 选项:
$ git rm --cached README