如何将Git中未提交的变更迁移并切换到指定提交?
解决Git未暂存变更切换旧提交并迁移变更的方案
无需创建分支
完全不用创建分支就能完成需求,下面是两种更简便的实用方案:
方案1:使用git stash(推荐)
这是Git原生的临时存储变更工具,步骤简洁:
- 临时存储当前未暂存的变更:
git stash push -m "临时存储新增目录变更"注:如果嵌套的子Git仓库存在未提交变更,
git stash默认不会处理,需单独对子仓库操作;若子仓库状态干净,可直接忽略此提示。 - 切换到目标旧提交:
git checkout <旧提交哈希/标签> - 将临时存储的变更恢复到当前工作区:
恢复后对应的stash记录会自动删除,无需额外清理。若后续想放弃这些变更,直接执行git stash popgit stash drop即可删除临时存储记录。
方案2:临时目录中转(你提到的方法)
该方法操作直观,适合对git stash不太熟悉的场景:
- 创建临时目录:
TMP_DIR=$(mktemp -d) - 将新增的目标目录移至临时目录:
mv <你的新增目录名> "$TMP_DIR" - 切换到旧提交:
git checkout <旧提交哈希/标签> - 将临时目录中的目标目录移回当前工作区:
mv "$TMP_DIR/<你的新增目录名>" . - 手动清理临时目录(可选,系统会自动清理临时文件,手动删除更稳妥):
rm -rf "$TMP_DIR"
方案对比
git stash:Git原生工具,步骤更少,无需手动处理文件移动,适合大多数常规场景。- 临时目录中转:操作逻辑直观,不用担心stash记录混淆,适合追求可视化操作的用户。
内容的提问来源于stack exchange,提问作者Galladite
相关产品推荐
相关产品推荐

