【发布时间】:2010-12-24 03:04:59
【问题描述】:
在以交互方式为重命名的文件添加补丁后,我在git status 输出中意外出现“dev/null”。我想知道这是否是意料之中的,这种行为是否有充分的理由,或者这可能是一个错误。
下面是如何重现这一点的简单说明。在我的真实场景中,它有点复杂,我使用git add -p 是有充分理由的,但我能够将其归结为这个最小的例子:
“新文件:dev/null”和“已删除文件:dev/null”是什么?我希望这会产生与我所做的完全相同的事情:
$ mv 富吧 $ git rm foo $ 混帐状态 # 在分支master上 # 要提交的更改: # (使用“git reset HEAD ...”取消暂存) # # 删除:foo # # 未跟踪的文件: # (使用“git add ...”来包含将要提交的内容) # # 酒吧我使用的是 1.6.5.5 版本的 Git,并且在 1.6.5.4 中也重现了它。我无法在具有版本 1.6.1.2 的 Git 的 Cygwin 环境中重现它。
【问题讨论】:
-
什么版本的git?我不能重复这种行为。而是在 git mv 响应后 git add -p: no changes
-
@William:使用
git mv是不等价的,因为它同时移动和添加文件。我只使用普通的mv移动文件,然后使用git add -p添加它。 -
@Dan,为什么?
git mv是更改文件名的“正确”方式。要删除您使用git rm的文件并移动您使用git mv的文件,不要只是自己移动文件并期望 git 读取您的想法:) -
@thenduks:我不相信这是真的。
git mv,如果我没记错的话,是为了安抚那些吵着要这样命令的人群。它不会做任何简单地移动文件然后添加它会做的事情。 git,事实上,确实读懂了你的想法(好吧,实际上它会检查差异并自行识别重命名)。 Git 不需要,或者想要,你告诉它这些事情。 -
多次阅读您的示例,每次查看“mv foo bar”时,我都会阅读“git mv foo bar”。奇怪的。无论如何,作为一种解决方法,如果你在运行 add -p 后调用“git add dev/null”,你会得到你想要的行为。
标签: git interactive git-add