我该如何检索我的变更?由于没有要合并的分支,因此我无法进行合并或切换。
您可以使用git reflog
获取在“无分支”(即分离的HEAD)状态下执行的提交哈希,并将其合并到您当前所在的分支中(例如主分支)。
类似于git merge HEAD@{1}
这样的命令。
您还可以使用git rebase -i
并从reflog中“选择”想要的提交。
我提交了一些工作后处于类似的状态:
Lilith:Manager KelSolaar$ git status
目前未在任何分支上。
我执行了git log以查看我的最后一个提交哈希:
Lilith:Manager KelSolaar$ git log
commit 49984303037e970d637161c3154b7fd7d6ae3a43 Author: KelSolaar Date: Wed Oct 5 22:41:31 2011 +0100
Introduce new "QObject" components category and rename existing ones to "Def
接着我检出了我的主分支:
Lilith:Manager KelSolaar$ git checkout master
上一个 HEAD 的位置是 4998430... 引入新的“QObject”组件类别,并将现有的重命名为“Default”和“QWidget”。
切换到分支“master”
最后,我使用提交哈希合并:
Lilith:Manager KelSolaar$ git merge 49984303037e970d637161
更新 141bc69..4998430
快进
src/manager/component.py | 2 +-
...
git checkout -
将会切换回上一个分支:
Thu Feb 21 12:50 AM /src/test ((08f84f4...)) $ git checkout master
Warning: you are leaving 1 commit behind, not connected to
any of your branches:
08f84f4 Fix everything
Switched to branch 'master'
Thu Feb 21 12:50 AM /src/test (master) $ git checkout -
HEAD is now at 08f84f4... Fix everything
Thu Feb 21 12:50 AM /src/test ((08f84f4...)) $
git branch
命令来检查你当前所在的分支。 - Adam Fowlergit checkout -
(只是再次强调它) - N8TRO使用“git reflog”命令可以显示您的git命令历史记录结果的提交哈希值。然后,您可以使用“git co hash”命令,在找到正确的提交后为其设置/创建一个分支。
你永远不会“不在任何分支上”。你可能曾经在名为master
的分支上,但是当你提交时,你一定在某个分支上。所以那个提交就在某个地方。
使用git log
查看历史记录。你可以使用git reset
回到过去(包括可选地保留工作目录中的更改)。
HEAD
指向一个特定提交的哈希值,而不是分支名称。使用分离头指针产生的任何提交都不会推进分支的末端,但仍然可以通过引用日志(reflog)一段时间内访问它们。 - Mark Longair
git bisect
的好提交时非常有用。"detached HEAD" 是这种状态的名称,因为 HEAD 直接指向一个提交,而不是通过特定引用间接指向它。 - Mark Longair