git 强推错误!如何恢复上一次的记录?

在 Git 使用过程中,我们可能会遇到意外的情况,比如误删了某个重要的提交,或者被强制推送覆盖了提交历史。幸好,Git 提供了一个强大的工具------git reflog,可以帮助我们找回这些丢失的提交。本文将详细介绍如何使用 git reflog 恢复提交,包括其使用场景、作用以及原理。

一、git log 和 git reglog的区别

git log

1. 作用

git log 用于显示项目的提交历史记录。它显示的是当前分支的提交记录,包括每个提交的哈希值、作者、日期和提交信息。

2. 用途

  1. 查看项目的提交历史。
  2. 了解项目的开发进程和代码变更情况。
  3. 找到特定提交以便检查、回滚或变基。

git reflog

1. 作用

git reflog 用于显示本地仓库的引用日志。它记录了所有对 HEAD 指针的移动操作,包括提交、变基、重置、合并和分支切换等操作。即使是已经被丢弃或覆盖的提交,也能在 git reflog 中找到。

2. 用途

  1. 恢复误删的提交或被覆盖的提交。
  2. 查看和回滚到以前的 HEAD 状态。
  3. 追踪所有对分支引用的更改。

二、git reflog使用场景

git reflog 命令特别适用于以下场景:

  1. 恢复误删的提交 :当你意外地重置了分支或删除了某个提交时,可以使用 git reflog 找回这些提交。
  2. 找回被覆盖的提交 :在使用 git push --force 后发现提交被覆盖,可以通过 git reflog 恢复这些提交���
  3. 紧急回滚和恢复 :在紧急回滚操作中,如果误删了关键提交,可以通过 git reflog 快速恢复。

三、如何通过git reflog恢复历史状态

使用 git reflog 和 git reset 命令,可以有效地找回丢失的提交。具体步骤如下:

先模拟个强推错误的场景

原始记录如下:

reset --hard操作

git push --force操作后远程和本地都没A、C、D的记录了 。

OK, 按照常理来说,现在可以开始着急了,记录都丢了。

接下来开始操作:

1. 使用 git reflog 命令查看操作记录

首先,打开终端或命令行,确保你处于 Git 项目的根目录下。然后执行 git reflog 命令,这将列出所有的操作记录,包括每次 HEAD 指针的变更,即使是被强制推送覆盖的提交也能找到。

sh 复制代码
git reflog

git reflog 的输出会列出最近的所有 HEAD 变更操作,每一行都会显示一个操作记录和对应的 commit hash。

2. 找到上一次的提交记录

在 git reflog 输出中,找到你想要恢复的提交的哈希值(commit hash)。这通常会是列表中的前几项之一。例如,我们找到了哈希值 0506078。

因为我们就操作了一步reset --hard,所以原来的状态就是倒数第二个commit,

3. 使用 git reset 命令恢复提交

一旦找到了哈希值,使用 git reset 命令将 HEAD 指针移动到该提交。

sh 复制代码
git reset --hard [commit-hash]

其中 [commit-hash] 是你从上一步中找到的哈希值。

所以,我们的命令是:

sh 复制代码
git reset --hard 0506078

此时,Git 将会把你的工作目录和暂存区恢复到 587d7f0 提交的状态。结果如下:

4. 强制推送到远程仓库

如果这些更改需要同步到远程仓库,直接使用 git push --force 强制推送。

此时不要使用update 先拉后推,直接强推。不然远程那个缺少记录的状态又回来了,还得重新操作。

sh 复制代码
git push --force

四、总结

git reflog 是 Git 的一个功能,它记录了所有对 HEAD 指针的移动操作。无论是分支切换、合并、变基、重置还是提交操作,git reflog 都会记录下来。这意味着,即使你误删了某个提交或进行了错误的重置操作,只要这些操作曾经影响过 HEAD 指针,你都可以通过 git reflog 找到并恢复到之前的状态。

通过使用 git reflog 和 git reset 命令,我们可以轻松恢复误删的提交或被覆盖的提交历史,保持代码库的完整性和历史记录的正确性。需要注意的是,git reflog 记录的是本地仓库的操作历史,因此这些恢复操作只能在本地进行。

相关推荐
子兮曰5 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰5 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
爱勇宝5 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
Winlifes5 天前
我给 Codex 做了一个 Git 面板:分支树、提交历史和工作区操作
git
胡写代码5 天前
别再前后端各写一套表单校验了
java·后端
大勇前进5 天前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端
yuzhi_liu5 天前
我用 LangGraph4j 实现 Multi-Agent Supervisor
后端
alsmile5 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go
大白805 天前
PHP 内存溢出排查思路:看懂报错日志,精准定位问题
后端
二月龙5 天前
PHP 接口返回统一响应封装,让前后端对接更省心
后端