在日常开发过程中,有一次对项目中的某文件名称进行了修改,然后在用$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

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

  1. linux文件给另一用户名和密码错误,linux重命名root后,使用su命令切换新用户时,提示密码错误...

    1.考虑到安全因素,用户希望把服务器上的root用户进行重命名,于是把/etc/passwd文件和/etc/shadow文件中的root修改为xxx.修改完毕后,测试正常,普通用户可以通过su - x ...

  2. linux怎么创建新用户名和密码错误,linux重命名root后,使用su命令切换新用户时,提示密码错误...

    1.考虑到安全因素,用户希望把服务器上的root用户进行重命名,于是把/etc/passwd文件和/etc/shadow文件中的root修改为xxx.修改完毕后,测试正常,普通用户可以通过su - x ...

  3. java源程序是由类定义_无论Java源程序包含几个类的定义,若该源程序文件以A.java命名,编译后生成的都只有一个名为A的字节码文件...

    无论Java源程序包含几个类的定义,若该源程序文件以A.java命名,编译后生成的都只有一个名为A的字节码文件 答:× 小儿头皮静脉输液时如误注入动脉,局部表现为: 答:呈树枝状苍白 人民群众既是历史 ...

  4. Linux下,文件权限UGO,ls -l命令的详细查看内容,修改文件文件夹属主属组的命令

    Linux下,用户权限UGO 注意: 1.Linux中的对象都有基本权限UGO,ugo分别表示user,group,other, 2.这里的对象是对文件和文件夹的简写,不是编程语言中的对象概念. 一. ...

  5. Eclipse中,查找文件后(使用ctrl shift R/T),如何关联到文件所在目录(查看文件所在的目录结构)。

    当我们找到一个类后,想要知道他的目录所在,我们可以这么做.                                                    Link with Editor   ...

  6. 如何批量给文件重命名?

    如何批量给文件重命名?电脑使用久了就会保存越来越多的文件,如果你有些许的强迫症,肯定不愿意电脑中的文件杂乱无章,这时候就需要对这些文件进行整理,整理文件的第一步就需要对相关联的文件进行重命名,让文件名 ...

  7. 电脑文件管理,文件夹重命名后如何批量恢复原来的名字

    文件夹太多,如何重命名,如果重命名错误了,又怎么快速恢复呢?今天小编给大家分享一个新的处理技巧,下面一起来试试吧. 材料准备: 一台Win系统的电脑 文件夹素材若干 步骤演示: 运行[文件批量改名高手 ...

  8. 批量重命名 文件名称命名错误后如何恢复原本名称

    我们在给文件重命名后发现重命名错误,要如何恢复成原本的名称呢?下面分享一个自由切换的重命名方法,一起来看看操作步骤吧! 第一步,运行文件批量改名高手,在文件批量重命名界面,首先"添加文件&q ...

  9. 文件重命名后教你恢复为原来的名字

    小伙伴们遇到需要给文件重命名时,处理文件名时采用批量重命名的方法,那么重命名后,如何将原文件名恢复呢?小编分享一个小方法一起来看看吧. 准备工具: 安装文件批量改名高手 多个文件 开始步骤: 先批量重 ...

最新文章

  1. zabbix 概念理解
  2. HTML, CSS. JS的各种奇淫技巧
  3. curl命令使用总结
  4. nginx+tomcat 反向代理 负载均衡配置
  5. 微软发布 Microsoft Edge 85 稳定版
  6. android 回退函数,详解React Native监听Android回退按键与程序化退出应用
  7. linux c 获取时间戳 打印时间戳
  8. js随机从数组中取出几个元素
  9. OpenTSDB 开发指南之 Api操作数据
  10. Android TextView多行文本滚动实现
  11. 国外稳定免费php,国外免费php空间 稳定
  12. MySQL多表关联查询与存储过程
  13. 4个人的学校(转载)
  14. 处理中文乱码以及登陆验证的过滤器Filter(建议收藏)
  15. 爬虫 Edge浏览器安装Xpaht Helper插件平替Chrome浏览器Xpaht Helper插件定位元素
  16. [源码和文档分享]基于HTML5和JS实现的在线电子钢琴网页版
  17. 什么是Activity?Activity的生命周期!
  18. word中段落里面的选项“如果定义了文档网格,则对齐到网格”起什么作用?
  19. 圣诞节计算机音乐,圣诞节音乐
  20. dBSPL、dBu、dBV、dBm、dBVU、dBFS等等和分贝有关的名词解析

热门文章

  1. 编辑合成图片怎么做?手把手教你合成
  2. 《变形金刚》真人电影知识普及贴-转帖
  3. 计算机中缺少mfc100.dll怎么办,缺少 mfc100u.dll,要怎么处理啊
  4. android防拆机方案,拆机狂人必备 iFixit Android客户端试用
  5. vanish高速反向代理服务器配置
  6. 什么是极客(Geek)?怎样成为一名极客?
  7. Schema being registered is incompatible with an earlier schema
  8. 学会Linux Shell循环脚本看这一篇就够了
  9. 2015年数据结构第五题(输出二叉树的最长一枝)(C/C++)
  10. Linux四网口绑定,linux 网口绑定