我读过的时候 在git中重命名文件时,应提交所有更改,执行重命名,然后暂存重命名的文件。Git将从内容中识别文件,而不是将其视为新的未跟踪文件,并保留更改历史记录。
但是,今晚仅此一次,我最终恢复为git mv
。
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
将我在Finder中的样式表从重命名iphone.css
为mobile.css
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
# Changed but not updated:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: css/iphone.css
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# css/mobile.css
所以git现在认为我已经删除了一个CSS文件,并添加了一个新文件。不是我想要的,让撤消重命名,让git完成工作。
> $ git reset HEAD .
Unstaged changes after reset:
M css/iphone.css
M index.html
回到我开始的地方。
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
让我们git mv
改为使用。
> $ git mv css/iphone.css css/mobile.css
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: css/iphone.css -> css/mobile.css
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: index.html
#
看起来我们很好。那么,为什么在我使用Finder时git第一次没有识别出重命名?
git mv old new
自动更新索引。当您在Git外部重命名时,您将必须执行git add new
和git rm old
并将更改暂存到索引。完成此操作后,git status
将按预期工作。
public_html
git目录中。执行git add .
和之后git commit
,它仍在中显示了一堆“已删除”文件git status
。我执行了git commit -a
,删除操作已提交,但是现在我没有关于现在存在文件的历史记录public_html
。这个工作流程没有我想要的顺利。
add+rm
或mv
-它会产生相同的结果。然后,Git使用其重命名/复制检测来告知您它是重命名。您引用的来源也不准确。是否在同一提交中修改+重命名实际上并不重要。当您在修改和重命名之间进行比较时,重命名检测会将其视为重命名+修改,或者如果修改是完全重写,它将显示为已添加和已删除-仍然无关紧要它。