当我运行git-mv file1 file2
时,我将文件从file1
移至file2
,正如我所料。但有时候,我的git status
给了我'奇怪'的输出。
当我运行git-mv f1 f2
,然后git status
:
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: f1 -> f2
这就是我所期待的。其他时候,在我提交f2
之后,我得到:
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: f1
这通常在我提交新文件后发生。我不知道为什么它发生 - 似乎是随机发生的(因为我通常得到renamed: f1->f2
消息,就像我期待的那样)。
我想知道为什么我有时会收到消息说我在运行git mv
后删除了文件,以及我已经完成了哪些步骤 - 我只是尝试重现,得到了renamed:..
;但是10分钟前,我在{em> 之前约10分钟deleted:...
收到一个git-mv
个文件。这让我很困惑。
答案 0 :(得分:4)
听起来您将f1
重命名为f2
,但只提交f2
而不是删除f1
。如果您使用git mv f1 f2
但是然后输入git commit f2
,则可能会发生这种情况,如果您输入mv f1 f2
然后执行git add .; git commit
答案 1 :(得分:2)
在git中移动文件真的只是删除旧的+创建一个新文件。
“重命名:..:”输出只是一种启发式方法,显然git有时会出错,即使它很明显。
答案 2 :(得分:2)
Git不像Subversion那样跟踪文件历史记录中的移动:历史记录只存储内容,git log
&amp; c。查看文件内容以及更改内容以推断更改是否为重命名。因此,git mv f1 f2
相当于:
mv f1 f2
git rm f1
git add f2
就Git而言,删除f1和添加f2是完全不同的变化,所以如果你现在做git commit f2
,你只提交f2的添加,并且f1的删除仍然是未提交的变更。要确保提交两个更改,请执行git commit
不带任何参数提交所有内容,或git commit f1 f2
仅提交对这两个文件的更改,或使用git commit --interactive
或其他工具进行编辑索引以更复杂的方式。 ( index 是“要提交的更改”的列表。)