我该怎么做git add -p

时间:2017-07-31 16:46:52

标签: git

我知道git add -p应用了一个补丁,这是git的一个很棒的功能。得到它。但是,我如何跳过我必须回答git提交给我的每个问题的部分,并且只需在第一个查询中输入它们,例如:

git add -p "Filename" "Option selected" "Enter"

2 个答案:

答案 0 :(得分:2)

git add -p的{​​{3}}是:

  

在索引和工作树之间以交互方式选择补丁,并将它们添加到索引中。

您寻找的选项将无法使用git add -p

虽然我主张花时间使用git add -p以交互方式审核更改,但您可以使用以下命令组合更快地查看代码:

git diff -w
git add -u

这允许您查看所有更改,然后暂存它们(仅记录跟踪的文件)。交互性较低,因此更快,但仍然保持审查。

答案 1 :(得分:1)

对于任何给定的文件 F (其中 F 是完整路径,例如src/sub/lib.py或其他),总是有 F 的三个副本现在可供您使用:

  • 已提交的版本(HEAD@中的版本);
  • 索引暂存区缓存中的中间版本(同一事物的三个名称)和
  • 您可以在编辑器中编辑的普通文件,名为 F

git add通常将 F 复制到索引版本中。

索引最好被描述为“将在下一次提交中的文件”。即使某些命令(例如git commit)谈论“空”提交,这些提交根本不是:它们具有与先前提交相同的文件。如果他们从前一次提交中的文件中没有更改,则它们只是“空”。所以索引非常罕见为空:它通常只是先前的提交,直到你运行git add

通过对这两个版本的文件执行git add -pgit diff做什么比较现在索引中的内容与工作树中的内容。然后,它允许您通过应用工作树版本和索引版本之间的一点点差异,一次更新一个部分的索引版本。但它是一个交互式程序,所以它真的非常想要与人类进行交互。它不是以编程方式驱动的。

如果您知道自己想要工作树版本的前半部分和索引版本的后半部分,那么有很多方法可以实现这一点。他们中的大多数都很难做到正确。最简单(也是最简单的)非交互方法是保存工作树版本的副本,暂时将其替换为要复制到索引中的版本,使用git add从工作中复制 - 要索引的树,然后使用保存的版本重新替换工作树版本。

您还可以使用git apply --index --recount将补丁的部分内容提供给git apply。这是add -pwhich is actually written in Perl)的作用。

您最后所做的就是将文件的某些变体复制到索引中,以便HEAD,索引和工作树版本都不同。您可以以任何方式执行此操作,只要您知道将文件复制到索引中的棘手问题(具体而言,在使用{{1}之前,必须在内容上运行任何行尾hackery和“干净”过滤器程序}或git update-index --cacheinfo直接更新索引。