暂存

1 命令

git add 是暂存的主命令。不速之客不会自动纳入 Git 的跟踪范围。运行命令 git add 将它添加到跟踪名单。注意,新加入跟踪名单的文件总是默认直接暂存的。当 git add 的参数是目录路径时,该目录下所有文件都会被跟踪。我们常用 git add . 一键跟踪当前目录下所有文件。

2 状态

git status 可以随时查看项目文件的暂存状态。

文件可能同时存在已暂存和未暂存两种状态,因为 Git 以“行”为基本单位,与其说暂存是已跟踪文件的一种状态,不如说是已跟踪文件的行的一种状态。

git gui 是 Git 入门的好帮手,虽然它只实现了部分功能,但应付日常已经足够。

3 忽略

.gitignore (注意第一个字符是小数点)用于过滤无需 Git 管理的文件。要养成一开始就设置好 .gitignore 的习惯,以免将来不慎提交。

.gitignore 的格式规范如下:

  • 所有空行或者以 # 开头的行都会被 Git 忽略。
  • 可以使用标准的 glob 模式匹配。
  • / 开头可以防止递归。
  • / 结尾可以指定目录。
  • 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号 ! 取反。

glob 模式是指 shell 所使用的简化正则表达式,常见的表达形式有:

  • 星号 * 匹配零个或多个任意字符。
  • [abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a ,要么匹配一个 b ,要么匹配一个 c )。
  • 问号 ? 只匹配一个任意字符。
  • 如果在方括号中使用 - 分隔两个字符,表示所有在这两个字符范围内的都可以匹配,比如 [0-9\] 表示匹配所有 0 到 9 的数字。
  • 使用两个星号 ** 表示匹配任意中间目录,比如 a/**/z 可以匹配 a/za/b/za/b/c/z等。

.gitignore 是有顺序的,建议先写忽略规则,后写例外规则。

.gitignore 范例参见 https://github.com/github/gitignore 。

4 移除

目前只考虑简单的情况,即移除 Git 仓库对指定文件的版本控制。

$ git rm # 不保留文件
$ git rm --cached # 保留文件

5 重命名

$ git mv file_from file_to
<=>
$ mv README.md README
$ git rm README.md
$ git add README

Git 太聪明了,即使这三条命令分开操作,它也能猜出你在重命名。