Git强制推送覆盖提交后,如何恢复原仓库中的配置文件?
恢复被强制推送覆盖的Git仓库文件
步骤1:找到被覆盖的旧提交哈希
- 方式1(GitHub网页端):打开仓库的「Commits」页面,若看不到旧提交,点击页面右上角的「...」选择「View all commits」;或者进入「Insights」->「Network」,这里能看到所有提交节点,找到被覆盖前的目标提交,复制它的哈希值(一串7位或更长的字母数字)。
- 方式2(本地Git命令):先克隆当前仓库到本地:
进入仓库目录后,执行命令查看远程分支的操作日志:git clone <你的仓库URL>
日志里会列出所有远程分支的操作记录,找到强制推送前的那一行,复制对应的提交哈希。git reflog origin/main # 若你的主分支是master,替换成origin/master
步骤2:恢复旧提交
方式A:直接恢复到主分支(简单直接)
- 切换到主分支:
git checkout main # 对应分支名替换成master(如果你的主分支是master) - 将分支重置到旧提交:
git reset --hard <复制的旧提交哈希> - 强制推送到远程仓库:
执行后,远程仓库的主分支就会恢复到之前的状态。git push --force origin main
方式B:创建新分支保存旧提交(更安全,避免误操作)
- 基于旧提交创建新分支:
git checkout -b recover-old-config <复制的旧提交哈希> - 此时这个新分支里就是你之前的配置文件,可通过
git log或文件管理器确认内容。 - 若要合并到主分支,先切换回主分支:
git checkout main - 合并恢复分支:
git merge recover-old-config - 推送合并后的结果:
git push origin main
注意事项
- GitHub会保留一段时间的废弃提交对象,只要不是很久之前的覆盖操作,大概率能找回。
- 建议之后给仓库开启「分支保护规则」(仓库Settings -> Branches -> Branch protection rules),禁止对主分支的强制推送,避免类似误操作。
内容的提问来源于stack exchange,提问作者Gustavo Lozada
相关产品推荐
相关产品推荐

