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

时间:2016-04-04 15:07:32

标签: git git-checkout

我是git的新手所以请耐心等待。在我的本地回购中,我已经在这个分支上工作了很长一段时间。我还没有真正推进,因为我是唯一一个参与这个项目的人。今天我终于决定将开发分支合并到主分支中,所以我做了git checkout master。 (之前我做过git status,无需添加任何内容。

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

如何恢复我的最新提交?

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

1 个答案:

答案 0 :(得分:1)

从我们的讨论中可以看出,你曾经处于一个独立的头状态,而不是你的功能分支check_pburst。将提交从分离状态转换为实际分支的标准解决方案是首先创建分支。从您的分离状态执行以下操作:

git checkout -b check_pburst_detached

此时,您已经创建了一个真正的Git分支,其中包含您所做的所有杂散提交。在这一点上谨慎的是通过将其推送到遥控器来备份你的工作:

git push origin check_pburst_detached

如果在任何后续点出现错误或迷路,您可以随时“重置”回这个分支,您知道该分支包含您的所有提交。

由于您希望实际保留功能分支中的所有分离提交,因此最好选择在check_pburst_detached上重新定位check_pburst,然后使用前者快进后者:

git checkout check_pburst_detached
git rebase check_pburst

完成rebase,然后快速合并check_pburst_detachedcheck_pburst

git checkout check_pburst
git merge check_pburst_detached

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