首页 > 解决方案 > 我在旧提交时提交了,我怎样才能找到那个提交?

问题描述

我正在做一些更改,我提交了一个旧的提交,我history在 bash 上执行,我发现了这一点。

1000  git checkout 7227... <-- I was on branch main and then I checkout on commit 7227...
  --- Working on changes ---
1012  git commit -am "Login corrections" <-- I did not realize I was not working on main branch
1013  git pull origin main <-- I found out the problem and then I checkout to main

我搬到了分支main,现在我不知道在哪里可以找到我对消息所做的提交Login corrections,如前所示。如果我能找到任何相关的东西,我尝试过git log --all --decorate --oneline --graph,但我没有找到任何东西。

标签: gitgithub

解决方案


每当你这样做git checkout $commithash时,你最终都会处于分离的头部状态。这意味着您不在分支上——您所做的任何提交操作都将创建无法从任何分支访问的提交。

git log --all仅显示可从任何 ref(分支或标签)访问的提交。这不包括“分离头”提交。

但一切都没有丢失。Git 提供了reflog显示某个 ref 如何随时间演变的命令。如果没有参数,它将显示HEADref 的最后状态(您当前签出的提交)。

您应该能够在那里看到您的分离提交。首先找到你的 checkout 提交,然后上面的一行应该是包含“提交(修改):登录更正”的行,从这个提交的提交哈希开始。您不妨使用 grep 快速限制输出:git reflog | grep -3 'Login corrections'.

一旦你有了它,你就可以从那个提交创建分支:git branch recover-detached $commithash_from_reflog. 然后,检查这个分支,检查它的历史,挑选、变基或合并它。


推荐阅读