Nodejs 在 git 中找回丢失的 commit

Nodejs 在 git 中找回丢失的 commit

干货!用git reflog 应该也能找回,不过没试过。。

5 回复

Nodejs 在 Git 中找回丢失的 Commit

在开发过程中,有时候可能会不小心删除或者覆盖了某些重要的提交(commit),这可能会导致一些重要的代码或变更丢失。幸运的是,Git 提供了一些强大的工具来帮助我们找回这些丢失的提交。

使用 git reflog

git reflog 是一个非常有用的命令,它记录了所有对分支头指针进行更改的操作,包括提交、合并、重置等。通过查看 reflog 记录,我们可以找到之前丢失的提交,并将其恢复到当前分支中。

以下是具体步骤:

  1. 查看 reflog 记录: 打开终端,进入你的 Git 仓库目录,运行以下命令:

    git reflog
    

    这将输出类似如下的信息:

    e345678 (HEAD -> main) HEAD@{0}: commit: Added new feature
    f123456 HEAD@{1}: reset: moving to HEAD^
    g987654 HEAD@{2}: commit: Fixed bug in login module
    h543210 HEAD@{3}: checkout: moving from develop to main
    

    这些记录显示了你对仓库所做的各种操作,包括提交和重置等。每条记录后面都有一个时间戳 {n},表示该操作发生的时间顺序。

  2. 找到丢失的提交: 从上述记录中,你可以看到每个提交的哈希值(如 e345678)。如果你发现某个提交被意外删除了,可以使用该哈希值来恢复它。

  3. 恢复丢失的提交: 使用 reset 命令将丢失的提交恢复到当前分支:

    git reset --hard <commit-hash>
    

    例如,如果丢失的提交哈希值为 f123456,则执行:

    git reset --hard f123456
    

    如果你想将这个提交重新添加到当前分支的顶部,可以使用 cherry-pick

    git cherry-pick <commit-hash>
    

示例

假设你在 main 分支上误删了一个重要的提交 f123456,可以通过以下步骤找回:

  1. 查看 reflog

    git reflog
    

    输出可能包含:

    e345678 (HEAD -> main) HEAD@{0}: commit: Added new feature
    f123456 HEAD@{1}: commit: Fixed bug in login module
    
  2. 恢复提交:

    git reset --hard f123456
    

这样,你就可以找回并恢复丢失的提交了。

希望这些方法能帮助你在 Node.js 开发过程中顺利地找回丢失的提交!


reflog 直接上

逼格不够高。。。

git fsck --lost-found 2&>/dev/null | while read i; do; git show `echo $i | cut -d ' ' -f 3` | head -n 6; done

这样简单了一些, show的输出可以自定义,所以

git fsck --lost-found  | grep commit | awk '{print $3}' | xargs -I {} git log --pretty=format:"%h %cd" {} | do_what_you_need

要在 Node.js 中通过 Git 找回丢失的 commit,可以使用 git reflog 命令来查看所有操作的日志记录。这个命令可以帮助你找到已经丢失或被误删的 commit。

示例步骤:

  1. 打开终端或命令行工具: 打开你的终端或者命令行工具,并进入你的项目目录。

  2. 运行 git reflog 命令: 输入以下命令来查看所有的操作日志记录:

    git reflog
    

    这个命令会列出最近所有的操作,包括 commit、checkout、branch 创建等信息。

  3. 查找丢失的 commit: 在 git reflog 的输出中,找到你想要恢复的那个 commit 的哈希值(commit ID)。

  4. 恢复丢失的 commit: 找到 commit 的哈希值后,可以使用 git reset 或者 git checkout 命令来恢复它。例如,假设丢失的 commit 哈希值是 abc1234,你可以这样做:

    • 如果你想把当前分支移动到这个 commit 上:
      git checkout abc1234
      
    • 如果你想把当前分支重置到这个 commit 上,并保留工作区和暂存区的内容:
      git reset --soft abc1234
      
    • 如果你想把当前分支重置到这个 commit 上,并且清空工作区和暂存区:
      git reset --hard abc1234
      

注意事项:

  • 使用 --hard 参数时要非常小心,因为它会清空工作区和暂存区的所有更改。
  • git reflog 显示的是本地仓库的操作记录,如果你已经推送到远程仓库并且进行了强制推送,那么可能无法通过这种方式找回丢失的 commit。

希望这些步骤能帮助你找回丢失的 commit!

回到顶部