提交的代码被git覆盖丢失 如何恢复已commit未push的改动?
已提交Git改动丢失恢复方案
前置说明
只要你本地没有执行过git gc类的对象清理操作,所有曾经提交过的改动都会保留在Git本地对象库中,可通过以下步骤找回:
第一步:定位丢失的提交记录
- 执行
git reflog命令,查看本地所有分支的全量操作历史,包含被覆盖、重置的提交快照,每条记录前会标注对应的commit哈希值。 - 找到你提交需要保留改动的那一条记录,操作描述一般为
commit: [你当时填写的commit信息],复制对应的7位哈希值备用。
第二步:按需恢复提交
方案1:提取提交内的指定内容
如果只需要丢失提交里的部分代码,执行git checkout [刚才复制的commit哈希值],此时工作区会恢复到你当时提交的状态,直接拷贝需要的内容即可。
方案2:将丢失的提交合并到当前分支
如果需要把丢失的提交完整合并到当前工作分支:
- 先切回你原本的工作分支,执行
git cherry-pick [刚才复制的commit哈希值] - 如果出现冲突,解决冲突后执行
git add [冲突文件],再执行git cherry-pick --continue即可完成恢复。
方案3:直接重置分支到丢失提交的状态
如果不需要当前远端拉取的内容,希望分支完全回到你提交后的状态,执行git reset --hard [刚才复制的commit哈希值]即可,注意该操作会覆盖当前工作区未提交的改动,操作前请确认无未保存内容。
后续操作提示
恢复完成后如果需要推送到远端,先执行git pull --rebase合并远端改动后再执行push,避免再次出现分支落后的报错。后续执行强制覆盖类操作前,可先执行git stash暂存本地未提交的改动,降低内容丢失风险。
内容的提问来源于stack exchange,提问作者user765443
相关产品推荐
相关产品推荐

