在分支之间来回切换后缺少提交

Missing commits after switching back and forth between branches

我是 git 的新手,所以请多多包涵。在我的本地回购协议中,我已经在这个分支上工作了一段时间,有很多提交。我已经有一段时间没有真正推动了,因为我是唯一一个在这个项目上工作的人。今天我终于决定可能是时候将开发分支合并到主分支中了,所以我做了一个 git checkout master。 (我之前做了一个 git status ,不需要添加任何内容)。

切换到 master 后,我决定回到我的开发分支 git checkout check_pburstcheck_pburst 是我的开发分支的名称)但是现在我只能看到当时的提交我推了。我有一种感觉,我在远程跟踪分支上(也许吧?)。 git log 显示我的很多提交都没有显示。有什么方法可以让我看到推送后的提交?我希望我能给你们更多信息,但我不小心关闭了 git bash,现在我收到的消息无法再查看了。

如何恢复我最近的提交?

更新:在进一步研究这个问题之后,我做了一个 git branch 并且只看到了两个分支(这是有道理的)。然后我做了一个 git checkout tab tab 并列出了更多分支,但是这些分支中的 none 有我的最新提交。然后我做了一个 git reflog 来显示我最近的提交。我做了一个git checkout 25edfe8。然后我做了一个 git branch 并注意到我最近的提交是在分支 Detached HEAD at 25edfe8

从我们的讨论中可以看出,您一直在超然的状态下工作,而不是在您的功能分支中工作 check_pburst。将提交从分离状态带入实际分支的标准解决方案是首先创建一个分支。在分离状态下执行以下操作:

git checkout -b check_pburst_detached

此时,您已经创建了一个真正的 Git 分支,其中包含您所做的所有杂散提交。此时通过将其推送到远程来备份您的工作是明智的:

git push origin check_pburst_detached

如果您在随后的任何时候犯了错误或迷路了,您总是可以 "reset" 回到这个分支,您知道它包含您所有的提交。

因为你想在你的特性分支中保留所有分离的提交,你最好的选择可能是在 check_pburst 上变基 check_pburst_detached 然后用前者快进后者:

git checkout check_pburst_detached
git rebase check_pburst

完成变基,然后快进合并 check_pburst_detachedcheck_pburst:

git checkout check_pburst
git merge check_pburst_detached

这个合并应该有零冲突,因为 check_pburst_detached 分支应该在 check_pburst 之前。您可以验证您的功能分支 check_pburst 确实有丢失的提交。