Nodejs 在 git 中找回丢失的 commit
Nodejs 在 git 中找回丢失的 commit
干货!用git reflog 应该也能找回,不过没试过。。
Nodejs 在 Git 中找回丢失的 Commit
在开发过程中,有时候可能会不小心删除或者覆盖了某些重要的提交(commit),这可能会导致一些重要的代码或变更丢失。幸运的是,Git 提供了一些强大的工具来帮助我们找回这些丢失的提交。
使用 git reflog
git reflog
是一个非常有用的命令,它记录了所有对分支头指针进行更改的操作,包括提交、合并、重置等。通过查看 reflog
记录,我们可以找到之前丢失的提交,并将其恢复到当前分支中。
以下是具体步骤:
-
查看
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}
,表示该操作发生的时间顺序。 -
找到丢失的提交: 从上述记录中,你可以看到每个提交的哈希值(如
e345678
)。如果你发现某个提交被意外删除了,可以使用该哈希值来恢复它。 -
恢复丢失的提交: 使用
reset
命令将丢失的提交恢复到当前分支:git reset --hard <commit-hash>
例如,如果丢失的提交哈希值为
f123456
,则执行:git reset --hard f123456
如果你想将这个提交重新添加到当前分支的顶部,可以使用
cherry-pick
:git cherry-pick <commit-hash>
示例
假设你在 main
分支上误删了一个重要的提交 f123456
,可以通过以下步骤找回:
-
查看
reflog
:git reflog
输出可能包含:
e345678 (HEAD -> main) HEAD@{0}: commit: Added new feature f123456 HEAD@{1}: commit: Fixed bug in login module
-
恢复提交:
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。
示例步骤:
-
打开终端或命令行工具: 打开你的终端或者命令行工具,并进入你的项目目录。
-
运行
git reflog
命令: 输入以下命令来查看所有的操作日志记录:git reflog
这个命令会列出最近所有的操作,包括 commit、checkout、branch 创建等信息。
-
查找丢失的 commit: 在
git reflog
的输出中,找到你想要恢复的那个 commit 的哈希值(commit ID)。 -
恢复丢失的 commit: 找到 commit 的哈希值后,可以使用
git reset
或者git checkout
命令来恢复它。例如,假设丢失的 commit 哈希值是abc1234
,你可以这样做:- 如果你想把当前分支移动到这个 commit 上:
git checkout abc1234
- 如果你想把当前分支重置到这个 commit 上,并保留工作区和暂存区的内容:
git reset --soft abc1234
- 如果你想把当前分支重置到这个 commit 上,并且清空工作区和暂存区:
git reset --hard abc1234
- 如果你想把当前分支移动到这个 commit 上:
注意事项:
- 使用
--hard
参数时要非常小心,因为它会清空工作区和暂存区的所有更改。 git reflog
显示的是本地仓库的操作记录,如果你已经推送到远程仓库并且进行了强制推送,那么可能无法通过这种方式找回丢失的 commit。
希望这些步骤能帮助你找回丢失的 commit!