问题标签 [git-detached-head]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - 为什么要更改所有父 ref 的分离头状态的新分支?
如果我在从分支的最后一次提交创建新分支与从分离的头部状态创建新分支时比较git/refs ,则 git/refs 显示不同的行为(名称),我想了解原因。
让我们假设头部在主人身上。
我需要一个新的开发分支。之后,我对新分支进行了一些提交,并对 master 进行了一些修复。
现在我看到了另一种解决 dev 分支的方法,我创建了第二个新分支,并在该分支上进行了一些提交,并再次在 master 上进行了一些修复。
但现在裁判看起来不一样了!只要我不合并加删除或只删除第二个分支,仍然是在第二个分支之后调用的前两个引用。
为什么这是一个好的行为,因为我不能轻易看到第一个裁判通常属于大师?只有散列和父散列有助于识别,但方法较慢。谢谢。
编辑:此处显示的信息由git log
命令提供。
reactjs - 我从“分离的 HEAD”状态返回,git 从本地目录中删除了我的 .env 文件
我正在检查我的提交历史以修复错误。我
git checkout 4a3cf4ebfc8c3d4a7f8b055b3f38cc90acf2a0cd
习惯在提交之间切换。我在 - 'detached HEAD' state
。
在那种状态下,我使用一些命令,例如:
git add .
git commit -m "massage"
然后我通过 . 切换不同的提交git checkout e255fb94e967c4c1463c25e44090bfc5a40b8463
。
我使用以下命令从“分离的 HEAD”状态返回:git checkout master
.
现在,我的.env
文件从本地目录中消失了。
我正在创建一个反应应用程序。我正在使用.gitignore
文件来忽略文件中的 API 密钥.env
。
git - 为什么我在 git repo 中有两个主要分支?
有人可以解释这里发生了什么吗?为什么有两个主要分支,一个名为“origin/main”,另一个名为“main”
做了一个别名图
图表显示我有两个分支。所以,我决定将主分支与 origin/main 合并
在结帐时,它说: 您处于“分离 HEAD”状态。
git - git HEAD 分离 *from* 与分离 *at*
我对 git并不陌生。我知道分离的 HEAD 是什么,我可以签出一个新的分支来继续前进。但是今天我看到的是一条detached from
消息而不是一条detached at
消息。在尝试中止包含 2 个子模块的 repo 中的合并时,我的一个子模块陷入了这种状态:
问题一:
从部分让我失望。我见惯了at
。这个提交是指什么?这是 HEAD 在被移动到无分支提交之前的最后一个地方吗?就我而言,该提交位于子模块 reflog 中,但它位于HEAD@{7}
. 那似乎不是 HEAD 的最后一个地方。但由于这是父模块中合并失败的结果,因此可能无法跟踪 HEAD 的移动。这个detached from
提交通常指的是什么?
问题2:
为了增加我的困惑,根据 git log,我的 HEAD指向子模块中的一个分支:
为什么git status
告诉我我的 HEAD 是分离的(从 9733eeb0
,虽然不是在什么提交),而git log
说它是指向的ba737d3b
?
c# - 环境变量 IGNORE_NORMALISATION_GIT_HEAD_MOVE 有什么作用?
我有一个使用 GitVersion.MsBuild 的 C# 代码库。有时我的 Jenkins 构建服务器会给我这个错误:
这种情况经常发生在构建一个不基于最新 master 的特性分支时(即,自从特性分支创建以来,master 已经移动)。
错误消息描述了建议的修复/解决方法,但我犹豫是否这样做,因为我不知道环境变量 IGNORE_NORMALISATION_GIT_HEAD_MOVE做了什么,而且我在任何地方都找不到它的描述。
如果我将 IGNORE_NORMALISATION_GIT_HEAD_MOVE 设置为 1,这有什么副作用?
提前致谢!
编辑:我在 GitVersion 的 GitHub 上的一个问题中问了同样的问题。
git - 恢复丢失的数据 GIT 分离头
我不太擅长 GIT(我并没有真正理解这个 HEAD 和“掌握”的东西)而且我刚刚丢失了我的代码。谁能帮我找回它?
我的步骤是这样的:
- 我添加了一些代码,我想提交它
- 弹出一个窗口,显示“警告:HEAD 已分离”之类的消息,但我点击了“仍然提交”
- 我切换到以前的提交,因为我想在旧代码中寻找一些东西
现在,我不能回到第一步。我尝试了一些在 stackoverflow 上找到的东西,但我无法取回我的原始代码(从步骤 1 开始)。 它是永远丢失了还是有办法找回它?
我正在为 GIT 使用 PHPStorm 图形界面,但看起来我可以在控制台中看到我的所有步骤,所以我将把它粘贴到下面,这样你就可以看到我的步骤到底是什么:
git - 不分离头的git子模块替换
我的情况:我有大量用于各种任务的计算机。我有大量的库,每个库都有自己的 git repo。
我的愿望:我希望能够在任何计算机上修改其中一个库,执行 git commit/push;然后转到另一台计算机,执行git pull
,并更新所有库。然后我修改其中一个库,提交/推送,当我拿到下一台计算机时,一切正常。
我目前的尝试:我有一个顶级 git 项目,它将所有其他库 repos 合并为子模块。这包括一个 .gitmodules 文件,该文件通过使用指定每个模块的工作分支
我已经update = merge
为每个模块设置了。我已经submodule.recurse
设置为 true,所以git pull
在顶层对每个模块做一些事情。
它是如何被打破的: 头变得分离。我编写了一个脚本来解析.gitmodules
文件并执行checkout
每个模块的相应分支。我然后commit
和push
顶部模块。每当我修改东西并尝试拉动时,例如在另一台机器上,头部就会分离。如果我在开始修改之前没有注意到头部已分离,我必须在提交更改之前仔细整理残骸。
在过去的十年里,实际上有 3.6k 的关于 git 分离头的堆栈溢出问题,而且大多数似乎来自子模块功能。我还没有经历所有这些,但我尝试过的没有奏效。
我忘记了为什么我拒绝了git-subtree
,但git-subrepo
一年多没有接触过,有 153 个问题和 25 个拉取请求待处理,所以我认为它已经死了。
有没有人对此有有效的解决方案?
@vonC 接受的答案看起来不错。
我可能可以稍微简化一下,但是我的顶级项目的自述文件现在说:
推荐结帐:
从存储库更新
如果头部脱落,请使用
添加模块
在以下示例中名为newmodule
working on path的模块。develop
如果子模块在默认master
分支上,您仍然需要配置该分支。
如果将子模块切换到不同的分支,则必须在顶层重新配置
并推送子模块和顶级项目。
在不同的工作目录(例如在不同的机器上),您必须
git - 如何回到旧提交,进行一些更改并在旧提交中提交这些更改,这也会更新所有以下提交
我正在处理一个文件,我提交了一些更改,然后我意识到我想要我最近在旧提交中所做的一些更改,因为它是旧提交的一部分。
所以,我想回到提交 2c57de7 并在同一个提交中添加一些我还没有添加到暂存区域的更改。我不想创建新的提交。
- 我尝试了 Detached HEAD 状态,但是在 2c57de7 提交之后我不知道如何合并分支。
- 我尝试了交互式 rebase 选项,方法是存储我当前的工作并在 2c57de7 提交时弹出工作并重置提交,以便我可以添加修改后的文件。但是我有很多合并冲突。如果有一篇关于如何解决合并冲突的文章,那将非常有帮助!
- 我尝试创建一个新分支,将该分支恢复到那个旧提交,进行更改,然后将该分支的尖端合并回来,但它不起作用。
这是我的提交历史
任何帮助,将不胜感激!
git - 如何解决“头部脱离“?
我最近在我的项目中检查了一个先前的提交,当我运行它时才注意到git status
它正在返回HEAD detached from 7263532
. 这是我最近的两次提交:
commit 8a870e8a1cb63bac7e9ec732908e54f20e841bb3 (HEAD)
commit 72635327285025d2e89962fc7ff854a8c67fdfe1 (dev-updates)
dev-updates
是我当前分支的名称。
我以为我在检查了前一个提交后又检查了我最近的提交。我的工作目录中有我不想丢失的编辑。我想知道的是,如何在HEAD detached
不丢失任何工作的情况下修复警告?