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 命令使许多最强大的功能可用,并保护您的工作。
评论已关闭。