切换到 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 往往是有限的)。
我写了 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 往往是有限的)。