【git系列】重命名文件后为何就是untracked状态了 以及 应该如何正规地修改文件呢
在日常开发过程中,有一次对项目中的某文件名称进行了修改,然后在用$git status
查看状态的时候,发现这个文件变成untracked状态了:
重命名文件/文件夹后为何就是untracked状态了
一开始很不理解,因为文件里的内容其实并没有做任何改动,只是文件名称变了,怎么git就不认识了吗?后来去学习了解了下,发现真的就是不认识了。
Git doesn’t think of or store its data this way. Instead, Git thinks of its data more like a set of snapshots of a mini filesystem. Every time you commit, or save the state of your project in Git, it basically takes a picture of what all your files look like at that moment and stores a reference to that snapshot.
通俗来讲就是,Git通过“快照”的方式来“记录”此时你的项目里文件看起来是怎么样的,然后以引用的方式记录到快照集里。这不是一种存储方式,更像是一堆类似于迷你文件系统的快照集。
那其实,这种快照也可以理解成,git就是通过文件名来追踪文件的;如果文件名变更了,和快照里记录的样子不一样,git就会认为我们删除了这个文件之后,又新建了一个文件。。。
应该如何正规地修改文件呢
这里的正规其实应该打上双引号的,因为其实我们就算通过上述的方式,直接在本地修改了文件,再重新$git add
加上这个文件其实也是可以的。
这里正规的意思是我们通过git命令行来修改文件名,而需要用到的命令就是$git mv
了。
$git mv
命令可以用来重命名文件或文件夹,其相关的参数详解如下:
- -v:显示信息。
- -f:强制重命名或移动,会覆盖目标文件。
- -k:跳过对重命名或移动出错的文件。出错的时候发生在源文件不存在,或者没有追踪的源文件,或者目标文件已经存在,但没有加-f进行覆盖。
- -n:只显示信息,但不会进行实际重命名或移动操作。
但该命令只能用于修改已经追踪的文件和文件夹;而在用该命令修改之后,相当于已经执行了add 命令,后面只要直接运行commit 命令就可以提交了。
重命名文件
$ git mv -v checkConfigWebview codecheckConfigWebview
$ git status
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: checkConfigWebview -> codecheckConfigWebview
# 重命名之后,只需要commit + push 就可以了
$ git commit -m "rename oldfile-checkConfigWebview to newfile-codecheckConfigWebview"
$ git push
重命名文件夹
$ git mv -v oldfolder newfolder
$ git status
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: oldfolder/... -> newfolder/...
# 重命名之后,只需要commit + push 就可以了
$ git commit -m "rename oldfolder to newfolder"
$ git push
参考链接
- 点赞
- 收藏
- 关注作者
评论(0)