该命令使用工作区的内容来更新索引,为下一次提交准备暂存的内容。通常情况下会添加当前目录的所有内容到索引,但是通过某些选项,它也可以用于仅添加对工作树文件所做的部分更改,或删除工作树中不存在的路径。
提交前可以多次执行此命令。它仅在运行add命令时添加指定文件的内容;如果要在下一次提交中包含后续更改,则必须再次运行`git add`将新内容添加到索引中。
只有在使用
--pathspec-from-file
选项时才有意义。指定路径元素用
NUL
字符分隔,所有其他字符都按字面意思(包括换行符和引号)表示。
此选项可用于分离命令行选项和文件列表(当文件名可能被误认为命令行选项时非常有用)。
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now> 1
你也可以输入
s
、
sta
或
status
,只要候选项是唯一的。
主命令循环有 6 个子命令(包括帮助和退出)。
这将显示每个路径下
HEAD
和索引之间的更改(即,如果输入
git commit
,将提交什么),以及索引和工作目录树文件之间的更改(即,在输入
git commit
之前,执行
git add
可以进一步暂存什么)。示例输出如下:
staged unstaged path
1: binary nothing foo.png
2: +403/-35 +1/-1 git-add--interactive.perl
它表明
foo.png
与
HEAD
有区别(但其是二进制的,因此无法显示行数),索引副本和工作目录树版本之间没有区别(如果工作目录树版本也不同,
nothing
的位置上会显示
binary
)。另一个文件 git add---interactive.perl 添加了403 行,如果提交索引中的内容,则删除了 35 行,但工作目录树文件有额外修改(一次添加一次删除)。
这将显示状态信息并发出 "Update>>" 提示。当提示以
>>
结尾时,可以进行多个选择,并用空格或逗号连接。你也可以输入范围。例如:"2-5 7,9" 将从列表中选择 2、3、4、5、7、9。如果省略一个范围中的第二个数字,则将获取所有剩余的补丁。例如:"7-" 从列表中选择 7、8、9。你可以输入
*
来选择全部补丁。
您选择的内容会用
*
突出显示,如下所示:
staged unstaged path
1: binary nothing foo.png
* 2: +403/-35 +1/-1 git-add--interactive.perl
要删除选定内容,请在输入前加上
-
,如下所示:
Update>> -2
进行选择后,输入空行,以便为索引中选定的路径暂存工作目录文件的内容。
它有一个与
update
非常相似的交互过程,所选路径的暂存信息将还原为 HEAD 版本。还原新路径将使它们不被追踪。
它有一个与
update
和
revert
非常相似的交互过程,允许您向索引添加未跟踪的路径。
这允许您从类似
status
命令的选择中选择一条路径。在选择路径之后,它将显示索引和工作树文件之间的差异,并询问您是否要暂存每个块的更改。您可以选择以下选项之一并输入回车:
y - 暂存此区块
n - 不暂存此区块
q - 退出;不暂存包括此块在内的剩余的区块
a - 暂存此块与此文件后面所有的区块
d - 不暂存此块与此文件后面所有的 区块
g - 选择并跳转至一个区块
/ - 搜索与给定正则表达示匹配的区块
j - 暂不决定,转至下一个未决定的区块
J - 暂不决定,转至下一个区块
k - 暂不决定,转至上一个未决定的区块
K - 暂不决定,转至上一个区块
s - 将当前的区块分割成多个较小的区块
e - 手动编辑当前的区块
p - 打印当前差异块
? - 输出帮助
在决定了所有块的操作后,如果有选择的区块,则会使用其来更新索引。
通过将配置变量
interactive.singleKey
设置为
true
,在此处可以不必键入回车。
这使您可以查看要提交的内容(即,在
HEAD
和索引之间)。
还可以执行更复杂的操作。但是请注意,由于补丁仅应用于索引而不是工作目录树,因此工作树似乎会 "撤消" 索引中的更改。例如,在索引中添加一行,而该行不在
HEAD
或工作目录树。此时会暂存其以进行提交,但是该行似乎在会在工作目录树中进行还原。
避免使用这些构造,除非格外小心。