为什么git让我们(没有分支机构)?

为什么git让我们(没有分支机构)?,git,Git,今天早上,我们退出了回购协议,git将我们置于(无分支机构)之上 我不明白,为什么会这样?如何在不丢失更改的情况下摆脱它?“当前不在任何分支上”表示您有一个,即您的头指针直接引用提交,而不是象征性地指向分支的名称 您可以通过检查Sa1的提交,或者当您处于ReBASE中间,或者合并失败时进入这种情况。很难说你是怎么意外地陷入这种境地的 据说,当您从分离的头部切换到某个分支时,可能会丢失更改,但reflog将始终跟踪头部移动的位置。事实上,Git1.7.5会在从分离的头部切换时警告您将丢失提交。只有

今天早上,我们退出了回购协议,git将我们置于(无分支机构)之上

我不明白,为什么会这样?如何在不丢失更改的情况下摆脱它?

“当前不在任何分支上”表示您有一个,即您的头指针直接引用提交,而不是象征性地指向分支的名称

您可以通过检查Sa1的提交,或者当您处于ReBASE中间,或者合并失败时进入这种情况。很难说你是怎么意外地陷入这种境地的

据说,当您从分离的头部切换到某个分支时,可能会丢失更改,但reflog将始终跟踪头部移动的位置。事实上,Git1.7.5会在从分离的头部切换时警告您将丢失提交。只有当您有未提交的更改时,您才会真正失去工作,您可能希望提交或隐藏这些更改

查看发生了什么的一个简单方法是
git reflog
git log-g--decoration
,以获得更详细的列表。
--decoration
选项将在每个SHA1上标记指向它的所有分支的名称。如果您当前头部的SHA1与master完全相同,那么您不必做任何事情,只需
git checkout master
即可回到正轨。否则,请查看SHA1是否由其他分支指向。如果没有,您可能希望创建一个分支来挂起它


另一个很好的命令是
git branch-av
,它同样会列出所有分支及其指向的对象,因此您可以看到您的
(无分支)
实际上应该是什么。

没有更多细节,很难判断

git pull
从远程存储库获取更改,然后进行合并。可以将其配置为执行重新基址而不是合并(通过执行
git pull--rebase
,或者为要拉入的分支配置
branch..rebase
的真值)

如果您从一个分支开始,任何合并类型的拉取都会将您留在该分支上。另一方面,rebase命令总是通过使用临时分离的头(也称为“无分支”)来工作。如果您在rebase类型拉取期间处于此状态,则这是因为拉取的rebase部分遇到冲突,正在等待您解决冲突并使用
rebase--continue
(或
--skip
,或
--abort

默认情况下,reflog存储对HEAD进行的每个更新(每个分支也可以有一个更新)。您可以使用
git reflog show
查看reflog(或者
git log-g
查看更详细的视图)。它可能会帮助你确定你是如何进入这种状态的

如果你在一个ReBASE中间(你有一个<代码> .git/RealBase< /COD>目录),那么它可能会停下来让你解决一些冲突。使用

git status
检查“未合并”条目。任何此类条目都应该在文件中嵌入冲突标记(假设它们是纯文本文件)。您应该编辑它们以解决冲突,并通过对它们运行
git add
将它们标记为合并。然后运行
git-rebase--continue
继续使用rebase。您可能会遇到更多应以类似方式处理的冲突(编辑、添加、继续)。如果您决定不再需要某个特定的提交,可以使用
git-rebase--skip
跳过它。您可以使用
git-rebase--abort
中止整个重基。由于任何冲突而停止重基时,所有这些重基命令都会在错误消息中列出。应用(或跳过)所有挂起的提交后,原始分支将使用最后一次新提交进行更新,头部将重新连接到该分支(如果中止,头部将在不更新分支的情况下重新连接)

如果你分离的头部不是因为在重新开始时发生冲突,那么你的头在拉扯之前的某个点被分离了。您需要评估树的当前状态,以决定要执行的操作。您可以使用
git show branch--current--all
git log--graph--oneline--decoration--all
或像
gitk
这样的图形工具来找出当前(分离的)头部与其他分支的关系。如果您决定保留头部的内容,则可以使用
git branch new\u branch\u name
为其创建一个新分支。如果要覆盖现有分支,请使用
git branch--force existing\u branch\u name
。然后使用
git checkout branch\u name
将存储库的头重新连接到分支。

请注意,如果在分离
头时运行“
git pull--rebase
”,git试图找到分离的
头的上游分支(根据定义,它不存在)并发出不必要的错误消息

Git1.8.0.1(2012年11月26日)不再是这种情况


请参阅。

关于存在
.git/rebase apply
作为线索的好提示。虽然许多人说
git reflog
对他们有效,但它对我来说没有任何回报
git branch-av
确实返回了所有远程分支及其指向的内容,但我不知道这与我的本地内容有什么关系。我在哪里?我在哪个部门和哪个委员会?这就是我早就想知道的。