uTools-Manuals/docs/git/git add.html
2019-04-08 23:22:26 +08:00

13 lines
21 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="c-markdown doc-markdown"><div class="doc-postil"><div class="c-markdown"><h2>Name</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>git-add  - 将文件内容添加到索引</p></div></div><div class="doc-postil"><div class="c-markdown"><h2>概要</h2></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">git add [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p]          [--edit | -e] [--[no-]all | --[no-]ignore-removal | [--update | -u]]          [--intent-to-add | -N] [--refresh] [--ignore-errors] [--ignore-missing]          [--chmod=(+|-)x] [--] [&lt;pathspec&gt;…]</pre></div></div><div class="doc-postil"><div class="c-markdown"><h2>描述</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>此命令使用工作树中的当前内容更新索引,以准备下一个提交的内容。它通常会将现有路径的当前内容作为一个整体添加,但通过一些选项,还可以使用它仅添加对所应用的工作树文件进行的部分更改的内容,或删除工作树中不存在的路径了。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>“索引”包含工作树内容的快照并且这个快照被当作下一次提交的内容。因此在对工作树进行任何更改之后在运行commit命令之前必须使用<code>add</code>命令将任何新的或修改的文件添加到索引。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>在提交之前命令可以执行多次。它只在add命令运行时添加指定文件的内容; 如果您希望在下一次提交中包含后续更改,则必须再次运行<code>git add</code>以将新内容添加到索引。</p></div></div><div class="doc-postil"><div class="c-markdown"><p><code>git status</code>命令可用于获取在下一次提交阶段更改的文件的摘要。</p></div></div><div class="doc-postil"><div class="c-markdown"><p><code>git add</code>命令默认不会添加被忽略的文件。如果在命令行上明确指定了任何被忽略的文件,<code>git add</code>将失败并显示被忽略的文件列表。忽略由Git执行的目录递归或文件名匹配达到的文件在shell之前引用您的globs将被忽略。<code>git add</code>命令可以用来添加<code>-f</code>(强制)选项忽略的文件。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>请参阅git-commit [1]了解将内容添加到提交的其他方法。</p></div></div><div class="doc-postil"><div class="c-markdown"><h2>选项</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>&lt;pathspec&gt;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>要从中添加内容的文件。<code>*.c</code>可以给Fileglobs例如添加所有匹配的文件。还可以给出一个主要的目录名例如<code>dir</code>添加<code>dir/file1</code><code>dir/file2</code>)来更新索引以匹配整个目录的当前状态(例如,指定<code>dir</code>将记录<code>dir/file1</code>工作树中修改的文件,<code>dir/file2</code>添加到工作中的文件树,也是一个文件<code>dir/file3</code>从工作树移除需要注意的是旧版本的Git用于忽略删除的文件;使用<code>--no-all</code>,如果你想添加修改或新的文件,但忽略删除那些选项。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>有关&lt;pathspec&gt;语法的更多详细信息,请参阅<code>pathspec</code>gitglossary [7]中的条目。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-n   --dry-run</p></div></div><div class="doc-postil"><div class="c-markdown"><p>实际不要实际添加文件,只显示它们是否存在和/或将被忽略。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-v   --verbose</p></div></div><div class="doc-postil"><div class="c-markdown"><p>Be verbose.</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-f   --force</p></div></div><div class="doc-postil"><div class="c-markdown"><p>允许添加被忽略的文件。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-i   --interactive</p></div></div><div class="doc-postil"><div class="c-markdown"><p>在工作树中交互添加修改的内容到索引。可以提供可选的路径参数,以将操作限制为工作树的子集。有关详情,请参阅“交互模式”。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-p   --patch</p></div></div><div class="doc-postil"><div class="c-markdown"><p>在索引和工作树之间交互地选择补丁块,并将它们添加到索引中。这使用户有机会在将修改后的内容添加到索引之前查看差异。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>有效地运行<code>add --interactive</code>,但绕过最初的命令菜单并直接跳转到<code>patch</code>子命令。有关详情,请参阅“交互模式”。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-e   --edit</p></div></div><div class="doc-postil"><div class="c-markdown"><p>在编辑器中打开差异与索引并让用户进行编辑。编辑器关闭后,调整大块头并将补丁应用到索引。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>此选项的目的是挑选要应用的补丁行,或者甚至修改要分级的行内容。这比使用交互式外观选择器更快更灵活。但是,很容易混淆自己并创建一个不适用于索引的补丁。请参阅下面的编辑补丁。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-u   --update</p></div></div><div class="doc-postil"><div class="c-markdown"><p>更新已存在匹配&lt;pathspec&gt;条目的索引。这会删除和修改索引条目以匹配工作树,但不会添加新文件。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>如果在使用<code>-u</code>选项时没有给出&lt;pathspec&gt; 则会更新整个工作树中的所有跟踪文件用于将更新限制为当前目录及其子目录的旧版本Git</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-A   --all   --no-ignore-removal</p></div></div><div class="doc-postil"><div class="c-markdown"><p>更新索引不仅在工作树具有匹配&lt;pathspec&gt;的文件的位置,而且索引已经有条目的位置。这会添加,修改和删除索引条目以匹配工作树。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>如果在使用<code>-A</code>选项时没有给出&lt;pathspec&gt; 则会更新整个工作树中的所有文件Git的旧版本用于将更新限制为当前目录及其子目录</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--no-all   --ignore-removal</p></div></div><div class="doc-postil"><div class="c-markdown"><p>通过添加索引未知的新文件和工作树中修改的文件来更新索引,但忽略已从工作树中删除的文件。当没有使用&lt;pathspec&gt;时,该选项是无操作的。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>这个选项主要是为了帮助习惯于老版本Git的用户他们的“git add &lt;pathspec&gt; ...”是“git add --no-all &lt;pathspec&gt; ...”的同义词,即忽略被删除的文件。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>-N   --intent-to-add</p></div></div><div class="doc-postil"><div class="c-markdown"><p>只记录路径将在稍后添加的事实。路径条目放置在没有内容的索引中。除此之外,这对于显示这些文件的非分离内容<code>git diff</code>以及提交它们<code>git commit -a</code>很有用。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--refresh</p></div></div><div class="doc-postil"><div class="c-markdown"><p>不要添加文件而只需刷新索引中的stat信息。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--ignore-errors</p></div></div><div class="doc-postil"><div class="c-markdown"><p>如果某些文件因索引错误而无法添加,请不要中止操作,而是继续添加其他文件。命令仍应以非零状态退出。<code>add.ignoreErrors</code>可以将配置变量设置为true以使其成为默认行为。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--ignore-missing</p></div></div><div class="doc-postil"><div class="c-markdown"><p>该选项只能与--dry-run一起使用。通过使用这个选项用户可以检查是否有任何给定的文件被忽略不管它们是否已经存在于工作树中。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--no-warn-embedded-repo</p></div></div><div class="doc-postil"><div class="c-markdown"><p>默认情况下,<code>git add</code>向嵌入式存储库添加索引时会发出警告,而不用<code>git submodule add</code>在其中创建条目<code>.gitmodules</code>。该选项将会禁止警告(例如,如果您正在手动对子模块执行操作)。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--chmod=(+|-)x</p></div></div><div class="doc-postil"><div class="c-markdown"><p>覆盖添加文件的可执行位。可执行位仅在索引中更改,磁盘上的文件保持不变。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>--</p></div></div><div class="doc-postil"><div class="c-markdown"><p>此选项可用于将命令行选项与文件列表分开,(当文件名可能被误认为是命令行选项时很有用)。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>结构</p></div></div><div class="doc-postil"><div class="c-markdown"><p>可选的配置变量<code>core.excludesFile</code>表示文件的路径该文件包含要从git-add中排除的文件名的模式类似于$ GIT_DIR / info / exclude。排除文件中的模式除了info / exclude中的使用外。见gitignore [5]。</p></div></div><div class="doc-postil"><div class="c-markdown"><h2>例子</h2></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>添加目录及其子目录<code>*.txt</code>下所有文件的内容<code>Documentation</code>$ git add Documentation / \ *。txt注意<code>*</code>在本例中星号是从shell引用的; 这让命令包含来自目录子目录的<code>Documentation/</code>文件。</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>考虑从所有git  -  *。sh脚本添加内容</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><p>$ git add git-*.sh</p></div></div><div class="doc-postil"><div class="c-markdown"><p>因为这个例子让shell扩展了星号即你明确列出了这些文件所以它没有考虑<code>subdir/git-foo.sh</code></p></div></div><div class="doc-postil"><div class="c-markdown"><h2>交互模式</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>当命令进入交互模式时,它显示<code>status</code>子命令的输出,然后进入其交互式命令循环。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>命令循环显示可用的子命令列表并提示“What now&gt;”。通常,当提示以单个结尾时<code>&gt;</code>您可以只选择其中一个选项并输入return如下所示</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">    *** Commands ***      1: status       2: update       3: revert       4: add untracked      5: patch        6: diff         7: quit         8: help
    What now&gt; 1</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>你也可以说<code>s</code><code>sta</code><code>status</code>只要选择是唯一的上方。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>主要的命令循环有6个子命令加上帮助和退出</p></div></div><div class="doc-postil"><div class="c-markdown"><p>状态</p></div></div><div class="doc-postil"><div class="c-markdown"><p>这显示了HEAD和索引之间的变化如果你这么说会犯什么内容<code>git commit</code>),以及索引和工作树文件之间的变化(也就是你可以在<code>git commit</code>使用之前进一步处理的内容<code>git add</code>)。示例输出如下所示:</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">              staged     unstaged path     1:       binary      nothing foo.png     2:     +403/-35        +1/-1 git-add--interactive.perl</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>它显示foo.png与HEAD有区别但是它是二进制的所以行数无法显示索引副本和工作树版本之间没有区别如果工作树版本也不同<code>binary</code>将显示在的地方<code>nothing</code>。另一个文件git-add {litdd} interactive.perl添加了403行如果您提交了索引中的内容则会删除35行但工作树文件会进一步修改一次添加和一次删除</p></div></div><div class="doc-postil"><div class="c-markdown"><p>更新</p></div></div><div class="doc-postil"><div class="c-markdown"><p>这将显示状态信息并发出“更新&gt;&gt;”提示。当提示以double结尾时<code>&gt;&gt;</code>可以进行多个选择并用空格或逗号连接。你也可以说范围。例如“2-5 7,9”从列表中选择2,3,4,5,7,9。如果省略范围中的第二个数字则会采用所有剩余的补丁。例如“7-”从列表中选择7,8,9。你可以说<code>*</code>选择一切。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>然后用你的选择突出显示<code>*</code>,如下所示:</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">           staged     unstaged path  1:       binary      nothing foo.png* 2:     +403/-35        +1/-1 git-add--interactive.perl</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>要删除选择,请使用<code>-</code>在输入前添加如下所示的内容:</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">Update&gt;&gt; -2</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>做出选择之后,回答一个空行,为索引中选定路径的工作树文件的内容分段。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>还原</p></div></div><div class="doc-postil"><div class="c-markdown"><p>这与用户界面<code>update</code>非常相似并且所选路径的暂存信息将恢复为HEAD版本的阶段信息。恢复新路径使得它们不受追踪。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>添加未跟踪</p></div></div><div class="doc-postil"><div class="c-markdown"><p>这有一个非常相似的用户界面<code>update</code><code>revert</code>,并允许您添加未经跟踪路径索引。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>patch</p></div></div><div class="doc-postil"><div class="c-markdown"><p>这使您可以从<code>status</code>类似选择中选择一条路径。选择路径后它会显示索引和工作树文件之间的差异并询问您是否要逐步更改每个块。您可以选择以下选项之一并键入return</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk or any of the remaining ones
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 help</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>在决定所有块的命运之后,如果选择了任何块</p><p>,那么索引会用选定的块更新。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>您可以通过设置配置变量<code>interactive.singleKey</code><code>true</code>来省略必须在此输入return 。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>diff</p></div></div><div class="doc-postil"><div class="c-markdown"><p>这使您可以查看将要提交的内容即在HEAD和索引之间</p></div></div><div class="doc-postil"><div class="c-markdown"><h2>编辑补丁</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>调用<code>git add -e</code><code>e</code>从交互式外观选择器中选择将在您的编辑器中打开一个修补程序; 编辑器退出后,结果将应用于索引。您可以随意对修补程序进行任意更改,但请注意,某些更改可能会导致混淆结果,甚至导致无法应用的修补程序。如果您想完全中止操作(即,在索引中没有任何新操作),只需删除该补丁的所有行即可。下面的列表描述了您可能在修补程序中看到的一些常见事项,以及哪些编辑操作对它们有意义。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>添加内容</p></div></div><div class="doc-postil"><div class="c-markdown"><p>添加的内容由以“+”开头的行表示。您可以通过删除它们来防止暂存任何附加行。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>删除内容</p></div></div><div class="doc-postil"><div class="c-markdown"><p>删除的内容由以“ - ”开头的行表示。您可以通过将“ - ”转换为“”(空格)来阻止他们的移除。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>修改的内容</p></div></div><div class="doc-postil"><div class="c-markdown"><p>修改的内容由“ - ”行(删除旧内容),后跟“+”行(添加替换内容)表示。您可以通过将“ - ”行转换为“”并去除“+”行来阻止修改。请注意,只修改这一对的一半可能会对索引造成令人困惑的更改。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>还有更复杂的操作可以执行。但要小心因为该补丁只适用于索引而不适用于工作树所以工作树将显示为“撤消”索引中的更改。例如向不在HEAD和工作树中的索引中引入一个新行将为新行提交提交但该行将显示为在工作树中恢复。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>避免使用这些构造,或者非常谨慎地这样做。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>删除未触及的内容</p></div></div><div class="doc-postil"><div class="c-markdown"><p>在索引和工作树之间没有差异的内容可以显示在上下文行上,以“”(空格)开头。您可以通过将空间转换为“ - ”来移除要移除的上下文行。生成的工作树文件将显示为重新添加内容。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>修改现有内容</p></div></div><div class="doc-postil"><div class="c-markdown"><p>也可以通过将它们分段移除(通过将“”转换为“ - ”)并在新内容中添加“+”行来修改上下文行。同样,可以修改现有添加或修改的“+”行。在任何情况下,新的修改都会在工作树中恢复。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>新的内容</p></div></div><div class="doc-postil"><div class="c-markdown"><p>您也可以添加修补程序中不存在的新内容; 只需添加新行,每行都以“+”开头。添加将在工作树中显示恢复。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>还有一些应该完全避免的操作,因为它们会使修补程序无法应用:</p></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>添加上下文(“”)或删除(“ - ”)行</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>删除上下文或删除行</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>修改上下文或删除行的内容</p></li></ul></div></div></div>