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>

此输出的上半部分显示了当前索引的状态,分为已暂存和未暂存两列:

  1. index.js 有 4 行被添加,4 行被删除。目前未暂存,因为当前状态显示为“unchanged”。当此文件被暂存时,+4/-4 的部分将转移到已暂存列,未暂存列将显示为“nothing”。
  2. 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