git add

概述

git add命令用于将变化的文件,从工作区提交到暂存区。它的作用就是告诉 Git,下一次哪些变化需要保存到仓库区。用户可以使用git status命令查看目前的暂存区放置了哪些文件。

  1. # 将指定文件放入暂存区
  2. $ git add <file>
  3. # 将指定目录下所有变化的文件,放入暂存区
  4. $ git add <directory>
  5. # 将当前目录下所有变化的文件,放入暂存区
  6. $ git add .

参数

-u参数表示只添加暂存区已有的文件(包括删除操作),但不添加新增的文件。

  1. $ git add -u

-A或者--all参数表示追踪所有操作,包括新增、修改和删除。

  1. $ git add -A

Git 2.0 版开始,-A参数成为默认,即git add .等同于git add -A

-f参数表示强制添加某个文件,不管.gitignore是否包含了这个文件。

  1. $ git add -f <fileName>

-p参数表示进入交互模式,指定哪些修改需要添加到暂存区。即使是同一个文件,也可以只提交部分变动。

  1. $ git add -p

注意,Git 2.0 版以前,git add默认不追踪删除操作。即在工作区删除一个文件后,git add命令不会将这个变化提交到暂存区,导致这个文件继续存在于历史中。Git 2.0 改变了这个行为。

实现细节

通过git add这个命令,工作区里面那些新建或修改过的文件,会加入.git/objects/目录,文件名是文件内容的 SHA1 哈希值。git add命令同时还将这些文件的文件名和对应的哈希值,写入.git/index文件,每一行对应一个文件。

下面是.git/index文件的内容。

  1. data/letter.txt 5e40c0877058c504203932e5136051cf3cd3519b

上面代码表示,data/letter.txt文件的哈希值是5e40c087...。可以根据这个哈希值到.git/objects/目录下找到添加后的文件。