不久前,我 checkout 了上一次提交,然后又 checkout 了最近一次提交。当时我没有意识到这一点,但这让我处于分离的头状态。从那时起,我已经做了多次提交,仍然处于分离的头状态。我知道我可以通过执行git checkout <branch name>来摆脱这种状态,但如果我这样做,我会失去什么吗?
git checkout <branch name>
hivapdat1#
我可以通过执行git checkout <branch name>来摆脱这种状态,但是如果我这样做,我会失去什么吗?是的,你会丢失所有在分离头模式下的提交,因为没有分支名称指向它们(你不会立即完全丢失它们,但它们会被销毁,访问它们会变得更加困难)。因此,只需首先创建一个分支,以保留它们并为您提供引用它们的方法。
git switch -c temp
现在可以安全地检出branchname。实际上,在你的例子中,因为你的HEAD实际上是你希望你的分支所在的位置,你可以把你的分支名称移到你现在所在的位置。根本不需要temp。
branchname
temp
git switch -C branchname
cidc1ykv2#
我当时没有意识到这一点,但这让我处于一种超然的头脑状态这就是为什么我提到最近的(Git 2.23, Q3 2019)git switch命令。你不能使用git switch <commit>并且 * 没有 * 意识到你最终处于分离的HEAD状态,因为这样的命令实际上会 * 失败 *,并显示错误消息:
git switch
git switch <commit>
fatal: a branch is expected, got <commitID> If you want to detach HEAD at the commit, try again with the `--detach` option
更多信息请参见“Why did my Git repo enter a detached HEAD state?”。使用--detach选项comes from Git 2.36 (Q2 2022)的提示。
--detach
2条答案
按热度按时间hivapdat1#
我可以通过执行
git checkout <branch name>
来摆脱这种状态,但是如果我这样做,我会失去什么吗?是的,你会丢失所有在分离头模式下的提交,因为没有分支名称指向它们(你不会立即完全丢失它们,但它们会被销毁,访问它们会变得更加困难)。
因此,只需首先创建一个分支,以保留它们并为您提供引用它们的方法。
现在可以安全地检出
branchname
。实际上,在你的例子中,因为你的HEAD实际上是你希望你的分支所在的位置,你可以把你的分支名称移到你现在所在的位置。根本不需要
temp
。cidc1ykv2#
我当时没有意识到这一点,但这让我处于一种超然的头脑状态
这就是为什么我提到最近的(Git 2.23, Q3 2019)
git switch
命令。你不能使用
git switch <commit>
并且 * 没有 * 意识到你最终处于分离的HEAD状态,因为这样的命令实际上会 * 失败 *,并显示错误消息:更多信息请参见“Why did my Git repo enter a detached HEAD state?”。
使用
--detach
选项comes from Git 2.36 (Q2 2022)的提示。