【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

参考链接

  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

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值