切换到 GIT 中缺失分支中的某个提交

Switch to a certain commit in missing branch in GIT

我写了 5 天的代码在点击错误的按钮后消失了。我一直在 HEAD 工作。并在 5 天内进行了 3 次提交。在 BitBucket 桌面应用程序中,我两次点击了不同的分支,现在它消失了。我找不到未发送到服务器的提交。

分支没有出现,但提交在历史记录中可见:

Macintosh:repo admin$ git branch -a
* HEAD
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

Macintosh:repo admin$ git branch
* HEAD
  master

这里是提交的历史:

Macintosh:repo admin$ git log --oneline --all --graph --decorate  $(git reflog | awk '{print }')
warning: refname 'HEAD' is ambiguous.
* 1d2bc57 THIRD
* d2a0291 SECOND
* 40c2d66 FIRST
| * 7100271 (HEAD -> master, origin/master, origin/HEAD, HEAD) CURRENT
|/  
* bc35e2f OLDCOMMINT

桌面应用程序显示空的 HEAD 分支,这就是为什么我不明白这里发生了什么。 如何从“7100271”(当前)切换到“1d2bc57”(第三)?

提前致谢。

您应该能够通过简单地在提交 sha

上使用 git checkout 来访问数据
git checkout 1d2bc57

在此之后您可能不再在任何分支('detached head state')上,在这种情况下您可以创建一个新分支。

git checkout -b newBranch

希望对您有所帮助!

使用 git reflog 获取您签出或提交的所有提交的历史记录。

找到最近的提交后,使用 git checkout <hash> 检查该提交。

这里发生的事情是你创建了一个名为HEAD的分支(regular, ordinary, local branch),其名称与Git使用的特殊名称HEAD冲突知道你在哪个分支。

当你检出像master这样的分支时,Git将分支名称写入HEAD文件。如果您检出名为 HEAD 的分支,Git 会将 HEAD 写入 HEAD 文件。整个情况非常令人困惑:就像去参加聚会或教室,发现每个人都叫 Ashot。 :-)

这里最好的做法是重命名或删除名为 HEAD 分支 (可以说是重命名或删除多余的 Ashot)。要从命令行重命名它:

$ git branch -m HEAD new-name

我不知道如何从一些花哨的 GUI 执行此操作(可能没有任何方法可以从那里修复它,GUI 往往是有限的)。