我读过,当在git中重命名文件时,你应该提交任何更改,执行重命名,然后暂存重命名的文件.Git将从内容中识别文件,而不是将其视为新的未跟踪文件,并保留更改历史记录.
然而,今晚这样做我最终还是回归git mv.
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
Run Code Online (Sandbox Code Playgroud)
将Finder中的样式表重命名iphone.css为mobile.css
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
# Changed but not updated:
# (use "git add/rm <file>..." to update what will be …Run Code Online (Sandbox Code Playgroud) 据我所知,Git并不需要跟踪文件重命名/移动/复制操作,那么git mv的真正目的是什么?手册页不是特别描述性的......
它已经过时了吗?它是一个内部命令,不是普通用户使用的吗?
我对git比较新,我之前使用过Subversion.
我注意到,如果文件已重命名,大多数图形git前端和IDE插件似乎都无法显示文件的历史记录.我用的时候
git log --follow
Run Code Online (Sandbox Code Playgroud)
在命令行上,我可以看到重命名的整个日志.
根据Linus Torvalds的说法--follow switch是一个"SVN noob",严肃的git用户不使用它:
--follow是一个彻底的黑客,意味着只是满足前SVN用户,他们从来不知道任何事情,如父母身份或漂亮的修订图表无论如何.
这并不是完全基本的,但是" - follow"的当前实现实际上是一个快速的预处理事物,它固定在修订行走逻辑上,而不是真正的整体.
它实际上被设计为"SVN noob",而不是"真正的git功能".我们的想法是,你要摆脱思维的(破碎)思维方式,重新命名大局.
我的问题:你们中的硬核git用户如何在重命名时获取文件的历史记录?这样做的"真实"方法是什么?
VS Code 中是否有任何方法可以更改文件名,以便将文件历史记录保留在 git 中,并且不会认为跟踪的文件已被删除?
我希望命令的 GUI 实现:
git mv oldName.abc newName.xyz
Run Code Online (Sandbox Code Playgroud)
谢谢
我正在尝试将特定项目的连续快照放入git的历史记录中.我这样做是通过使用每个快照的内容填充存储库目录然后运行
git add -A .
git commit -m 'Version X'
Run Code Online (Sandbox Code Playgroud)
这是本答案中推荐的方法.但是,我看到只有当100%的文件内容保持不变时,提交才会识别文件重命名.有没有办法影响重命名检测,git commit使其找到重命名文件内容已经改变了一点?我看到了git merge并且git diff有各种控制重命名阈值的选项,但这些选项不存在git commit.
我尝试过的事情:
为每个快照创建一个单独的分支,然后将连续的分支合并到master使用上
git merge -s recursive -Xtheirs -Xpatience -Xrename-threshold=20
但是,这使我保留了旧版本的重命名文件,同时也无法检测到重命名.