在交互式添加已重命名的文件的补丁后,我的git status
输出中出现意外的“dev / null”外观。我想知道这是否是预期的,这种行为有一些很好的理由,或者这可能是一个错误。
以下是如何重现此内容的简单说明。在我的真实世界场景中,它有点复杂,我有充分的理由使用git add -p
,但我能够将其归结为这个最小的例子:
$ git init test Initialized empty Git repository in /local_disk/tmp/test/.git/ $ cd test $ echo "foo" > foo $ git add foo $ git commit -m 'Add foo' [master (root-commit) 3643b5d] Add foo 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 foo $ mv foo bar $ git add -p diff --git a/foo b/foo index 257cc56..0000000 --- a/foo +++ /dev/null @@ -1 +0,0 @@ -foo Stage this hunk [y,n,q,a,d,/,e,?]? y $ git status # On branch master # Changes to be committed: # (use "git reset HEAD ..." to unstage) # # new file: dev/null # deleted: foo # # Changed but not updated: # (use "git add/rm ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # # deleted: dev/null # # Untracked files: # (use "git add ..." to include in what will be committed) # # bar
“新文件:dev / null”和“已删除文件:dev / null”是什么?我希望这会产生完全相同的事情:
$ mv foo bar $ git rm foo $ git status # On branch master # Changes to be committed: # (use "git reset HEAD ..." to unstage) # # deleted: foo # # Untracked files: # (use "git add ..." to include in what will be committed) # # bar
我正在使用Git版本1.6.5.5,并且还在1.6.5.4中复制了它。我无法在我的Cygwin环境中重现它,它的Git版本为1.6.1.2。
答案 0 :(得分:1)
正如thenduks所提到的,你不应该试图git add
删除文件。 git add
新文件,git rm
旧文件(或git mv old new
采用简单方法)。另一方面,git应该抱怨你正在做什么或者不要混淆并尝试添加一个不存在的dev / null文件。
<强>更新强>
git add -p
确实是用于暂存文件删除的有效方法,但在修复其他git apply
bug时,git apply
似乎会引入错误。
<强>更新强>
我可以在1.6.1.2的Linux上重现它,因此可能是cygwin git与正常行为有所不同。在这种情况下,前面提到的错误修复可能没有引入此行为,并且工作git add -p
可能特定于cygwin的git。我一直在试图找到git add -p
开始失败的地方。
<强>更新强>
事实证明这是git add
的互动方面的一个错误,Jeff King已经提出patches。