如何交换两个相同文件的Git历史记录且不执行提交操作?
解决方案
要实现不提交、将旧文件的历史关联到新文件的需求,可以直接操作Git索引(无需生成提交),步骤如下:
- 先确保工作区中
oldFile和newFile内容完全一致,且当前没有未提交的其他修改(如有可先暂存)。 - 执行命令将新文件与旧文件的历史对象绑定:
这个命令直接修改Git索引,让git update-index --cacheinfo 100644 $(git rev-parse HEAD:oldFile) newFilenewFile关联到oldFile在HEAD版本的内容哈希,Git会自动识别这是重命名操作,从而让newFile继承oldFile的完整提交历史。 - 从索引中移除旧文件(工作区的
oldFile会保留,之后可手动删除):git rm --cached oldFile
完成以上操作后,Git索引已处于你需要的状态:newFile拥有原oldFile的提交历史,oldFile不再被Git追踪,且全程没有生成任何提交,完全满足程序化实现的要求。
内容的提问来源于stack exchange,提问作者Paku
相关产品推荐
相关产品推荐

