繁体   English   中英

我怎么做git add -p

[英]How do I do git add -p

我知道git add -p应用了一个补丁,这是git的一个很棒的功能。 得到它。 但是我该如何跳过我必须回答git提出的每个问题的部分,而只是在我的第一个查询中已经键入了这些问题,例如:

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

意向git add -p是:

在索引和工作树之间交互地选择补丁块并将其添加到索引。

您寻求的选项会破坏使用git add -p的目的。

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

git diff -w
git add -u

这使您可以查看所有更改,然后进行更改(仅注意跟踪的文件)。 交互性较低,因此速度更快,但仍保持审核。

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

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

git add通常所做的是将F复制到索引版本中。

最好将索引描述为“将在下一次提交中的文件”。 即使某些命令(例如git commit )谈论的是“空”提交,这些提交也不是真正的:它们具有与先前提交相同的文件。 如果它们与上一次提交中的文件没有任何更改 ,则它们只是“空”。 因此,索引为的情况非常少见:通常只充满前一次提交,直到运行git add为止。

git add -p所做的是通过对文件的这两个版本进行git diff 比较 ,将索引中的当前内容与工作树中的内容进行git diff 然后,您只需应用工作树版本和索引版本之间的一点点差异,即可一次更新索引版本。 但这是一个交互式程序,因此它确实非常希望与人互动。 它不是设计为以编程方式驱动的。

例如,如果您知道要使用工作树版本的上半部分和索引版本的后半部分,则有很多方法可以实现此目的。 他们中的大多数人都很难做到正确。 最简单(因此最容易实​​现)的非交互式方法是保存工作树版本的副本,将其临时替换为您要复制到索引中的版本,使用git add从工作树复制到索引,然后用保存的版本替换工作树版本。

您还可以使用git apply --index --recountgit apply提供补丁的一部分。 这就是add -p实际上是用Perl编写的 )的作用。

最后,您要做的就是将文件的某些变体复制到索引中,以便HEAD,索引和工作树版本都不同。 只要您知道将文件复制到索引中的棘手问题,就可以按照自己喜欢的方式进行操作(特别是,在使用git update-index --cacheinfo之前,必须在内容上运行任何行末黑客和“干净”过滤器程序) git update-index --cacheinfo--index-info直接更新索引)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM