使用 git reflog 命令从不成功的 git rebase 中恢复

git rebase 命令允许您调整 Git 仓库的历史记录。这是一个有用的功能,但当然,可能会犯错误。使用 git reflog 命令进行恢复。
2 位读者喜欢这个。
Woman sitting in front of her laptop

kris krüg

git rebase 命令允许您调整 Git 仓库的历史记录。这是一个有用的功能,但当然,可能会犯错误。与 Git 的通常情况一样,您可以修复错误并将仓库恢复到以前的状态。要从不成功的 rebase 中恢复,请使用 git reflog 命令。

Git reflog

假设您执行此交互式 rebase

$ git rebase -i HEAD~20

在此上下文中,~20 表示 rebase 最近 20 次提交。

不幸的是,在这个假想的场景中,您错误地 squash 或丢弃了一些您不想丢失的提交。您已经完成了 rebase,但这是 Git,所以当然,您可以恢复丢失的提交。

使用 reflog 审查您的历史记录

 运行 git reflog 命令以收集数据并查看您与仓库交互的历史记录。这是我的演示仓库的示例,但是,结果将因您的实际仓库而异

$ git reflog
222967b (HEAD -> main) HEAD@{0}: rebase (finish): returning to refs/heads/main
222967b (HEAD -> main) HEAD@{1}: rebase (squash): My big rebase
c388f0c HEAD@{2}: rebase (squash): # This is a combination of 20 commits
56ee04d HEAD@{3}: rebase (start): checkout HEAD~20
0a0f875 HEAD@{4}: commit: An old good commit
[...]

查找最后一个好的提交

在此示例中,HEAD@{3} 表示您的 rebase 的开始。您可以判断出来是因为其描述是 rebase (start)

紧随其后的提交 0a0f875 HEAD@{4} 是您执行不正确的 rebase 之前 Git 分支的尖端。根据您的仓库有多旧和活跃,下面可能还有更多行,但假设这是您要恢复的提交。

恢复提交

要恢复您意外 squash 的提交及其所有父提交,包括那些意外 squash 或丢弃的提交,请使用 git checkout。在此示例中,HEAD@{4} 是您需要恢复的提交,因此这是要 check out 的提交

$ git checkout HEAD@{4}

恢复好的提交后,您可以像往常一样使用 git checkout -b <branch_name> 创建新分支。将 <branch_name> 替换为您想要的 branch 名称,例如 test-branch

Git 版本控制

Git 的目的是跟踪版本,其默认设置通常是尽可能多地保留有关您工作的数据。学习使用新的 Git 命令使许多最强大的功能可用,并保护您的工作。

标签
Avatar
Agil 拥有超过 6 年的技术作家经验,专门为软件产品制作准确、清晰和简洁的文档。他有能力向包括开发人员、工程师和最终用户在内的各种受众传达技术思想。

评论已关闭。

© . All rights reserved.