文件状态
工作目录中的每个文件有三种状态:
- 已跟踪的
- 未跟踪的
- 被忽略的
已跟踪的文件是指被git add
命令纳入版本控制的文件,在上一次快照中有它们的记录
未跟踪的文件是指没有纳入版本控制的文件,比如新建的文件,它们既不存在于上次快照中,也没有放入暂存区
被忽略的文件是指被写入.gitignore
文件中的文件名或目录名,比如个人笔记、临时文件等
编辑过某些文件之后,由于自上次提交后你对它们做了修改,Git 将它们标记为已修改文件。我们逐步将这些修改过的文件放入暂存区,然后提交所有暂存了的修改,如此反复。所以使用 Git 时文件的生命周期如下:
记录更新的步骤
检查当前文件状态
要查看那些文件处于什么状态,可以使用
git status
跟踪新文件
要开始跟踪一个文件,它使用文件或目录的路径作为参数。如果参数是目录的路径,该命令将递归地跟踪该目录下的所有文件
git add
如果跟踪后缀名相同的所有文件,可以用
git add *.java
如果要跟踪当前目录下的所有文件,可以用
git add .
暂存已修改文件
可以使用git add
命令已修改文件放到暂存区
这是个多功能命令:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等
状态简览
git status
命令的输出非常详细,可以使用-s
或--short
命令得到更紧凑的输出
git status -s
git status --short
忽略文件
可以将要忽略的文件名或目录名写入.gitignore
文件中
.gitignore
文件的格式规范如下:
所有空行或者以 # 开头的行都会被 Git 忽略。
可以使用标准的 glob 模式匹配。
匹配模式可以以(/)开头防止递归。
匹配模式可以以(/)结尾指定目录。
要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
查看已暂存的和未暂存的文件
如果想要知道具体修改了什么地方,可以使用
git diff
若要查看已暂存的将要添加到下次提交里的内容,可以用
git diff --cached
Git 1.6.1 及更高版本还允许使用git diff --staged
,效果是相同的,但更好记些
请注意,git diff
本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动
提交更新
使用命令时,会启动文本编辑器输入本次提交的说明
git commit
默认会启用shell
的环境变量$EDITOR
所指定的软件,一般都是 vim 或 emacs。也可以使用git config --global core.editor
命令设定编辑软件
也可以使用-m
选项,将提交信息和命令放在同一行,如
git commit -m "first commit"
跳过使用暂存
在提交的时候,给git commit
加上-a
选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过git add
步骤
git commit -a
移除文件
要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。 可以用git rm
命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。
git rm
重命名文件
要在 Git 中对文件改名,可以使用git mv file_from file_to
其实,运行git mv
就相当于运行了下面三条命令:
$ mv README.md README
$ git rm README.md
$ git add README