我知道git add -p应用了一个补丁,这是git的一个很棒的功能。得到它。但是,我如何跳过我必须回答git提交给我的每个问题的部分,并且只需在第一个查询中输入它们,例如:
git add -p "Filename" "Option selected" "Enter"
答案 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
或@
中的版本); git add
通常将 F 复制到索引版本中。
索引最好被描述为“将在下一次提交中的文件”。即使某些命令(例如git commit
)谈论“空”提交,这些提交根本不是空:它们具有与先前提交相同的文件。如果他们从前一次提交中的文件中没有更改,则它们只是“空”。所以索引非常罕见为空:它通常只是先前的提交,直到你运行git add
。
通过对这两个版本的文件执行git add -p
,git diff
做什么比较现在索引中的内容与工作树中的内容。然后,它允许您通过应用工作树版本和索引版本之间的一点点差异,一次更新一个部分的索引版本。但它是一个交互式程序,所以它真的非常想要与人类进行交互。它不是以编程方式驱动的。
如果您知道自己想要工作树版本的前半部分和索引版本的后半部分,那么有很多方法可以实现这一点。他们中的大多数都很难做到正确。最简单(也是最简单的)非交互方法是保存工作树版本的副本,暂时将其替换为要复制到索引中的版本,使用git add
从工作中复制 - 要索引的树,然后使用保存的版本重新替换工作树版本。
您还可以使用git apply --index --recount
将补丁的部分内容提供给git apply
。这是add -p
(which is actually written in Perl)的作用。
您最后所做的就是将文件的某些变体复制到索引中,以便HEAD,索引和工作树版本都不同。您可以以任何方式执行此操作,只要您知道将文件复制到索引中的棘手问题(具体而言,在使用{{1}之前,必须在内容上运行任何行尾hackery和“干净”过滤器程序}或git update-index --cacheinfo
直接更新索引。