我创建了一个新文件foo.rb
。
$ git add -p foo.rb
$ No changes.
但是,在没有-p
的情况下添加有效。这是一个错误还是一个功能?
我希望它能让我暂存部分文件。
答案 0 :(得分:4)
git add --patch
的记录如下:
这有效地运行
add --interactive
,但绕过初始命令菜单并直接跳转到patch子命令。
并且git add --interactive
被描述为仅添加已修改的更改:
将工作树中的修改内容以交互方式添加到索引中。
所以不,这种行为是设计上的。
使用补丁添加新文件无论如何都没有多大意义,因为整个文件添加是一个单独的块,可以是暂存的(或者你必须手动编辑补丁)。所以它是git add foo.rb
或不是。
您可以使用git add --intent-to-add file
或git 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个操作)的单个操作,您的意思是执行添加+修改的操作。