10.4 移动文件
通过将welcome.txt改名为README文件来测试一下在Git中如何移动文件。Git提供了git mv命令完成改名操作。
$git mv welcome.txt README
可以从当前的状态中看到改名的操作。
$git status
On branch master
Changes to be committed:
(use "git reset HEAD<file>…"to unstage)
#
renamed:welcome.txt->README
#
提交改名操作,在提交输出中可以看到改名前后两个文件的相似度(百分比)。
$git commit-m "改名测试"
[master 7aa5ac1]改名测试
1 files changed,0 insertions(+),0 deletions(-)
rename welcome.txt=>README(100%)
从提交日志中出现的文件相似度可以看出,Git的改名操作得益于Git对文件追踪的强大支持(文件内容作为blob对象保存在对象库中)。改名操作相当于对旧文件执行删除,对新文件执行添加。实际上完全可以不使用git mv命令,而是以git rm和git add两条命令取而代之。为了试验不使用git mv命令是否可行,先撤销之前进行的提交。
撤销之前测试文件移动的提交。
$git reset—hard HEAD^
HEAD is now at 63992f0 restore file:welcome.txt
撤销之后welcome.txt文件又回来了。
$git status-s
$git ls-files
welcome.txt
新的改名操作不使用git mv命令,而是直接在本地改名(文件移动),将welcome.txt改名为README。
$mv welcome.txt README
$git status-s
D welcome.txt
?? README
为了考验一下Git的内容追踪能力,再修改一下改名后的README文件,即在文件末尾追加一行。
$echo "Bye-Bye.">>README
可以使用前面介绍的git add-A命令。相当于对修改文件执行git add,对删除文件执行git rm,对本地新增文件执行git add。
$git add-A
查看状态,也可以看到文件重命名。
$git status
On branch master
Changes to be committed:
(use "git reset HEAD<file>…"to unstage)
#
renamed:welcome.txt->README
#
执行提交。
$git commit-m "README is from welcome.txt."
[master c024f34]README is from welcome.txt.
1 files changed,1 insertions(+),0 deletions(-)
rename welcome.txt=>README(73%)
这次提交中也看到了重命名操作,但是重命名相似度不是100%,而是73%,这是因为重命名后的文件又追加了一行。