详解git submodule HEAD detached 的问题

yizhihongxing

详解git submodule HEAD detached 的问题

问题描述

在使用 Git 进行子模块管理时,可能会出现 HEAD detached 的问题,即子模块处于分离头状态,此时操作会受到限制,比如无法直接修改代码等。

问题原因

在父仓库中,子模块仅仅是被引用,而非实实在在的代码,Git 仅管理子模块仓库的引用版本号。在引用时,默认选择该子模块仓库的特定 commit 时,便会出现 HEAD detached 的情况。

解决方案

问题的解决方案是确保子模块处于一个分支上,而非对于某个 commit 进行引用。采取以下步骤解决该问题:

  1. 进入子模块目录,分支切换到父仓库所需要的版本:
$ cd ./path/to/your/submodule
$ git checkout master
$ git pull
  1. 返回父仓库,将子模块仓库的版本信息保存:
$ cd ..
$ git add ./path/to/your/submodule
$ git commit -m "Update submodule to latest version"
  1. 推送更改到远端仓库:
$ git push

从此,再对子模块操作等流程都将变得方便。当然,在我们正式执行这三步的时候,有些问题预先需要注意和处理。

注意事项

  1. 避免在父仓库在切换版本时使用不当,会破坏子模块所在的 repo 的 HEAD 状态。正确从远端仓库拉取代码,或为其创建分支。

  2. 如果在子模块里出现了分支,则切换分支后也需在父仓库中更新 commit 信息。

示例说明

示例一

# clone 一个仓库,其中包含子模块的引用
$ git clone git@github.com:user/repo.git

# 初始化子模块,但存在 HEAD detached 问题
$ cd ./repo
$ git submodule update --init
$ cd ./path/to/your/submodule
$ git status

# 强制更改模块为一个新的分支名
$ git checkout master
$ git pull
$ git checkout -b new_branch_name
$ cd ..
$ git add ./path/to/your/submodule
$ git commit -m "Update submodule to latest version"
$ git push

示例二

# 对子模块进行 clone 或者更改操作
$ cd ./path/to/your/submodule
$ git checkout -b new_branch_name
$ git add filename
$ git commit -m "Create new file"
$ git push

# 在父仓库下,触发重新记录提交,使子模块的引用指向新的提交指针
$ cd ..
$ git add ./path/to/your/submodule
$ git commit -m "Update submodule to latest version"
$ git push

结论

当 Git 子模块状态出现 HEAD detached 问题,主要是因为 git submodule 默认情况下使用了 git checkout 命令,并不是保持子模块的状态为分支,这不利于我们后续的使用,将我们的开发限制在一个井号下,限制了我们对于这份代码作出任何修改。我们需要将子模块仓库变为普通的 Git 仓库,并从父仓库里引用,并将提交指针转移到一个将要保存的的分支上。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解git submodule HEAD detached 的问题 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • 分享10个很棒的学习Android开发的网站

    下面我将详细讲解如何分享10个很棒的学习Android开发的网站。 1. 确定分享的网站 首先要确定分享的网站,需要挑选出适合不同学习阶段的网站,如入门级、进阶级、高级级别的网站。可以参考一些知名的中英文Android开发社区,如掘金,CSDN,Android Developer等。 2. 确定分享的内容 分享内容可以是针对入门级、进阶级、高级级别的网站列表…

    GitHub 2023年5月16日
    00
  • 详解Vue项目引入CreateJS的方法(亲测可用)

    关于“详解Vue项目引入CreateJS的方法(亲测可用)”,下面是具体的攻略: 前置知识 在做这个项目之前,需要你了解以下技术: Vue.js CreateJS Webpack 步骤一:安装CreateJS 使用npm安装CreateJS: npm install createjs –save 或者使用yarn安装CreateJS: yarn add c…

    GitHub 2023年5月16日
    00
  • Android开发VR实战之播放360度全景视频

    下面是详细的 Android 开发 VR 实战之播放 360 度全景视频的攻略: 准备工作 在开始本项目之前,我们需要安装如下软件/工具: Android Studio IDE:用于开发 Android 应用程序,构建虚拟现实场景 Unity3D:用于创建虚拟现实场景,导入视频素材并处理360度全景视频 创建Android Studio项目 在Android…

    GitHub 2023年5月16日
    00
  • Gin 框架快速创建静态文件下载Web服务

    下面我将为您详细讲解如何使用 Gin 框架快速创建静态文件下载 Web 服务。 准备工作 在开始之前,您需要先安装好 Go 和 Gin 框架。如果您还没有安装,可以参考以下文章进行安装: Go 安装指南 Gin 安装指南 Step 1:创建一个空的 Gin 项目 首先,您需要创建一个空的 Gin 项目。在命令行里执行以下命令: mkdir gin-demo …

    GitHub 2023年5月16日
    00
  • Golang项目在github创建release后自动生成二进制文件的方法

    首先,创建一个Golang项目,并在Github上创建一个对应的仓库。 其次,在本地编写Golang程序并进行测试,确保程序可以正常运行并编译通过。 接下来,需要将本地代码push到Github上的仓库中。在命令行中进入项目所在目录,运行以下命令: git add . git commit -m “initial commit” git push 然后,切换…

    GitHub 2023年5月16日
    00
  • Docker 安装Jenkins全过程及踩坑指南

    下面是“Docker 安装Jenkins全过程及踩坑指南”的完整攻略。 安装 Docker 首先我们需要安装 Docker,这里我以 Ubuntu 18.04 为例: $ sudo apt update $ sudo apt install docker.io 安装完成后,我们可以通过运行 docker -v 命令来检查它是否已成功安装。 启动 Jenkin…

    GitHub 2023年5月16日
    00
  • Goland使用Go Modules创建/管理项目的操作

    下面是Goland使用Go Modules创建/管理项目的完整攻略: 一、介绍 Go Modules 是 Go 1.11 版本新增的功能,用于更好的管理和维护Go的项目依赖。使用Go Modules可以解决传统版本管理工具(比如Git,SVN)的不足,使得代码的开发和维护更加简单和方便。Goland是由JetBrains开发的一款Go语言的集成开发环境,在G…

    GitHub 2023年5月16日
    00
  • Python使用Pyqt5实现简易浏览器(最新版本测试过)

    下面我来为您详细讲解“Python使用Pyqt5实现简易浏览器(最新版本测试过)”的完整攻略: 1. 安装PyQt5 PyQt5是Python中的GUI编程库,需要先安装。可以在终端中输入以下命令安装: pip install pyqt5 2. 搭建界面 使用QtDesigner软件创建一个窗口,然后将其保存为.ui文件,再使用以下代码将其转化为Python…

    GitHub 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部