如何将Git仓库中所有未提交变更完整迁移至另一仓库?
无需提交迁移Git未提交变更(含重命名/新增/删除)
方法1:借助Git Stash迁移(推荐)
既然git stash能正常识别所有变更(包括重命名),用它导出的补丁能完美保留Git对文件操作的识别:
在源仓库导出变更补丁:
# 临时 stash 变更并导出补丁 git stash push -m "temp-migrate-changes" git stash show -p > workspace-changes.patch git stash pop # 恢复源仓库的变更状态或者直接生成stash对象的补丁(无需临时stash):
git stash create > workspace-changes.patch将
workspace-changes.patch复制到目标仓库,执行应用:git apply workspace-changes.patch执行后用
git status验证,所有重命名、新增、删除操作都会被正确还原。
方法2:调整git diff参数生成兼容补丁
如果偏好直接用git diff,需要强制Git检测重命名,避免将重命名拆成「删除原文件+新增新文件」的独立操作:
在源仓库生成带重命名识别的补丁:
git diff HEAD --rename-detect > workspace-changes.patch--rename-detect参数会让Git把文件重命名识别为单一的移动操作,而非两个独立变更。在目标仓库应用补丁时,指定识别重命名指令:
git apply --rename workspace-changes.patch这个参数会让Git解析补丁中的移动指令,正确创建新命名的文件并移除原文件,不会出现原文件变空的问题。
验证操作结果
应用补丁后,在目标仓库执行以下命令确认变更与源仓库一致:
git status
内容的提问来源于stack exchange,提问作者Jennifer M.
相关产品推荐
相关产品推荐

