git - 我在旧提交时提交了,我怎样才能找到那个提交?
问题描述
我正在做一些更改,我提交了一个旧的提交,我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
,但我没有找到任何东西。
解决方案
每当你这样做git checkout $commithash
时,你最终都会处于分离的头部状态。这意味着您不在分支上——您所做的任何提交操作都将创建无法从任何分支访问的提交。
git log --all
仅显示可从任何 ref(分支或标签)访问的提交。这不包括“分离头”提交。
但一切都没有丢失。Git 提供了reflog
显示某个 ref 如何随时间演变的命令。如果没有参数,它将显示HEAD
ref 的最后状态(您当前签出的提交)。
您应该能够在那里看到您的分离提交。首先找到你的 checkout 提交,然后上面的一行应该是包含“提交(修改):登录更正”的行,从这个提交的提交哈希开始。您不妨使用 grep 快速限制输出:git reflog | grep -3 'Login corrections'
.
一旦你有了它,你就可以从那个提交创建分支:git branch recover-detached $commithash_from_reflog
. 然后,检查这个分支,检查它的历史,挑选、变基或合并它。
推荐阅读
- python - 使用 boto3 从 aws lambda 调用 amazon lex 时出错
- html - 使用 css nth-child 伪代码重复颜色模式
- node.js - 尝试部署项目,但未从数据库中获取数据
- python - 如何编写 mysql db 数据的 if 条件(条件:qty == 0)然后电子邮件应该发送给管理员
- r - 为什么不同组之间的 p 值总是相同的,有人知道我在做什么错吗?
- excel - 将图像从 Excel 粘贴到 Word 中的特定占位符
- python-3.x - 当用硒和美丽的汤刮页面时,我会得到一些结果的重复
- amazon-sqs - Masstransit amazon-sqs 健康检查问题
- c++ - 为什么所有指针都没有被释放?
- javascript - 如何恢复来自 GetStream.io 提要的反应