如何在Git仓库中移动文件至新位置且不丢失提交历史?
把Git根目录文件移到src且保留提交历史的正确做法
别碰.git/index!用标准git mv流程就行
手动修改Git的内部索引文件很容易搞乱仓库状态,完全没必要。按下面的步骤来:
- 先建src文件夹(没建的话):
mkdir src - 移动文件到src:
- 如果你用Linux/macOS终端,一次性移走根目录非Git相关文件:
git mv !(README.md|.git) src/ - 要是Windows命令行不支持上面的语法,就挨个指定文件,或者用PowerShell:
Get-ChildItem -Exclude .git,README.md | Move-Item -Destination src git add .
- 如果你用Linux/macOS终端,一次性移走根目录非Git相关文件:
- 提交这次移动操作:
提交完后用git commit -m "迁移所有源码文件到src目录"git log --follow -- 文件名就能看到该文件从根目录到src的完整历史了,普通git log只会显示旧路径,这就是你之前误以为历史没关联的原因。
关于git rm --cache的正确用法
你之前执行报错是因为没指定要清除缓存的文件路径,正确写法是git rm --cache 具体文件名,但这个操作在当前场景里根本用不上,别瞎试。
要是已经手动改了索引文件的补救办法
如果之前手动编辑过.git/index导致仓库状态不对,先重置索引回到正常:
git reset HEAD
然后重新走上面的git mv流程就行。
内容的提问来源于stack exchange,提问作者user16316067
相关产品推荐
相关产品推荐

