4.1 暂存所有文件的更改
git add -A
版本 ≥ 2.0
git add .
在 2.x 版本中,git add . 会暂存当前目录及其所有子目录中文件的所有更改。但在 1.x 版本中,它只会暂存新增和修改的文件,不会暂存已删除的文件。
使用 git add -A 或其等效命令 git add --all,可以在任何版本的 Git 中暂存所有文件的更改。
4.2 取消暂存包含更改的文件
git reset <filePath>
4.3 按块添加更改
你可以使用 patch 标志查看哪些“块”(hunks)的更改将被暂存以提交:
git add -p
或
git add --patch
这会打开一个交互式提示,让你查看差异,并决定是否要包含这些更改。
Stage this hunk [y,n,q,a,d,/,s,e,?]?
y - stage this hunk for the next commit
n - do not stage this hunk for the next commit
q - quit; do not stage this hunk or any of the remaining hunks
a - stage this hunk and all later hunks in the file
d - do not stage this hunk or any of the later hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print hunk help
这有助于轻松捕捉你不希望提交的更改。
你也可以通过 git add --interactive 并选择 p 来打开此功能。
4.4 交互式添加
git add -i(或 --interactive) 会提供一个交互式界面,让你可以编辑索引,准备下一次提交的内容。你可以添加和移除整个文件的更改,添加未跟踪的文件,从跟踪中移除文件,还可以选择将更改的子部分放入索引中,通过选择要添加的更改块、分割这些块,甚至编辑差异。许多 Git 的图形化提交工具(例如 git gui)都包含此功能;这可能比命令行版本更易用。
如果你在工作目录中有纠缠不清的更改,希望将它们分别放入不同的提交中,而不是全部放入一个提交中,或者你在进行交互式变基(interactive rebase)并希望拆分过大的提交时,此功能非常有用。
$ git add -i
staged unstaged path
1: unchanged +4/-4 index.js
2: +1/-0 nothing package.json
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now>
此输出的上半部分显示了当前索引的状态,分为已暂存和未暂存两列:
index.js有 4 行被添加,4 行被删除。目前未暂存,因为当前状态显示为“unchanged”。当此文件被暂存时,+4/-4 的部分将转移到已暂存列,未暂存列将显示为“nothing”。package.json有 1 行被添加,并且已被暂存。由于它已被暂存,未暂存列显示为“nothing”。
下半部分显示了你可以执行的操作。你可以输入数字(1-8)或字母(s, u, r, a, p, d, q, h)。
status显示与上述输出上半部分相同的输出。update允许你使用附加语法对已暂存的提交进行进一步更改。revert将已暂存的提交信息回退到 HEAD。add untracked允许你添加之前未被版本控制跟踪的文件路径。patch允许你从类似于status输出中选择一个路径进行进一步分析。diff显示将要提交的内容。quit退出命令。help提供使用此命令的进一步帮助。
4.5 显示暂存的更改
要显示已暂存以提交的更改块:
git diff --cached
4.6 暂存单个文件
要暂存一个文件以提交,运行
git add <filename>
4.7 暂存已删除的文件
git rm filename
若要在不从磁盘中删除文件的情况下从 Git 中删除文件,使用 --cached 标志
git rm --cached filename