【git系列】重命名文件后为何就是untracked状态了 以及 应该如何正规地修改文件呢

举报
gentle_zhou 发表于 2022/02/20 16:16:44 2022/02/20
【摘要】 这里正规的意思是我们通过git命令行来修改文件名,而需要用到的命令就是$git mv了。

在日常开发过程中,有一次对项目中的某文件名称进行了修改,然后在用$git status查看状态的时候,发现这个文件变成untracked状态了:
image.png

重命名文件/文件夹后为何就是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

参考链接

  1. https://stackoverflow.com/questions/8198105/how-does-git-store-files
  2. http://modulesunraveled.com/very-basics-git/tracking-files-git-repository-git-add
  3. https://www.runoob.com/git/git-mv.html
  4. https://git-scm.com/docs/git-mv
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。