为什么`git add -p`不会播放未跟踪的文件?

时间:2015-07-20 11:17:59

标签: git

我创建了一个新文件foo.rb

$ git add -p foo.rb

$ No changes.

但是,在没有-p的情况下添加有效。这是一个错误还是一个功能? 我希望它能让我暂存部分文件。

3 个答案:

答案 0 :(得分:4)

git add --patch的记录如下:

  

这有效地运行add --interactive,但绕过初始命令菜单并直接跳转到patch子命令。

并且git add --interactive被描述为仅添加已修改的更改:

  

将工作树中的修改内容以交互方式添加到索引中。

所以不,这种行为是设计上的。

使用补丁添加新文件无论如何都没有多大意义,因为整个文件添加是一个单独的块,可以是暂存的(或者你必须手动编辑补丁)。所以它是git add foo.rb或不是。

您可以使用git add --intent-to-add filegit add -N file简单地悬停添加空文件。这会使用该文件名暂存一个空文件,因此下次运行git add -p时,该文件已知并且提供了一个真正的补丁。

答案 1 :(得分:1)

-p--patch将暂存区域与工作树进行比较,并使您可以仅将文件的某些部分与完整文件本身进行比较。如果要将文件的更改拆分为单独的提交而不是一个大的提交,则此交互式命令特别有用。但是,如果您的文件未被跟踪,则没有任何意义,因为它还不是您工作树的一部分。因此不会有任何变化。 add是一个多功能命令。如果您在文件是工作树的一部分之前使用git add一次,它将按预期工作。

使用git add后,正在运行git add -p会显示diff,并为您提供多种选择。

Stage this hunk [y,n,q,a,d,/,e,?]?

手册页中有关这些选项的一些摘录。

  
      
  • y - 阶段这个帅哥
  •   
  • n - 不要上演这个大块头
  •   

答案 2 :(得分:0)

您正在执行的操作是添加新文件,唯一的撤消操作是删除操作,该操作适用于整个文件,因为-p允许您应用部分暂存,因此无法执行此操作在你的情况下。

请记住,提交是对文件(或文件集,每个文件1个操作)的单个操作,您的意思是执行添加+修改的操作。