You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决复制测试站点与原生产站点的Git Detached Head问题

Drupal 9.4 站点远程 Git 仓库 detached HEAD 问题排查与解决方案建议

问题背景

作为 Git 和 Composer 新手,我维护着一个 Drupal 9.4 站点,通过这两个工具搭建并仅保留必要插件。域名迁移后,请求主机复制站点创建测试站,尝试用 Composer 添加 Google Analytics 模块并 push 到远程仓库时,遇到远程服务器 detached HEAD问题,无法推送,且测试站和生产站均存在该问题。

已尝试操作

  • 使用 Git 版本 >2.3,执行 git config receive.denyCurrentBranch updateInstead,仍无法推送到非 bare 仓库;
  • 创建临时分支捕获 HEAD,切换回 master 后仍处于 detached HEAD 状态;
  • 执行 git revert HEAD~1 回滚提交,未解决问题。

当前状态检查

  • 测试站:Git 状态显示在 master 分支且与 origin/master 同步,但切换到 origin/master 时显现 detached HEAD;
  • 生产站:处于 detached at origin/master 状态,存在未提交的 .DS_Store 文件。

技术疑问

  1. 主机复制/克隆站点的过程中,是否可能自动添加了标签、引用或分支?
  2. 所有分支和 HEAD 都指向最后一次提交,为何仍出现 detached HEAD 问题?

解决方案建议

一、修复 detached HEAD 问题的具体步骤

1. 清理生产站未提交文件

先处理生产站的 .DS_Store 无关文件,避免干扰仓库状态:

git rm --cached .DS_Store
echo ".DS_Store" >> .gitignore
git add .gitignore
git commit -m "Add .DS_Store to gitignore"

2. 修正远程仓库的分支状态

分别登录测试站和生产站的服务器,进入站点目录执行:

# 切换到主分支(若你的主分支是 main 则替换为 main)
git checkout master
# 绑定本地分支与远程分支的跟踪关系
git branch --set-upstream-to=origin/master master

执行后用 git status 确认,确保处于 master 分支而非 detached 状态。

3. 重新配置非 bare 仓库的推送权限

确认 receive.denyCurrentBranch updateInstead 配置是在远程仓库中设置的(而非本地):
登录远程服务器,进入站点的 .git 目录执行:

git config receive.denyCurrentBranch updateInstead

同时确保远程工作目录没有未提交的修改,否则推送会失败。

二、长期维护方案选择

不建议转回 SFTP

SFTP 无法跟踪版本变更,对于依赖 Composer 的 Drupal 站点来说,Git+Composer 的组合能更好地维护核心、模块的版本一致性,避免手动更新带来的冲突和安全风险,更适合长期维护。

重新初始化 Git 仓库(备选方案)

若上述步骤无法解决问题,可尝试彻底重置仓库:

  1. 本地备份 .gitignore、composer.json、composer.lock 这三个关键文件;
  2. 删除本地和远程服务器上的 .git 文件夹;
  3. 本地重新初始化仓库:
    git init
    git add .
    git commit -m "Initial commit for Drupal 9.4 site"
    git remote add origin <远程仓库地址>
    
  4. 远程服务器创建 bare 仓库(推荐用 bare 仓库接收推送,避免 detached HEAD 问题):
    mkdir site-repo.git
    cd site-repo.git
    git init --bare
    
  5. 本地推送到 bare 仓库,再在远程站点目录拉取代码:
    cd /path/to/site
    git clone /path/to/site-repo.git .
    

三、保障 Composer 维护核心需求

无论采用哪种方案,务必保留 composer.json 和 composer.lock,后续通过以下命令维护 Drupal 核心与模块:

# 更新 Drupal 核心
composer update drupal/core-recommended --with-all-dependencies
# 添加 Google Analytics 模块
composer require drupal/google_analytics
# 提交 Composer 变更到 Git
git add composer.json composer.lock
git commit -m "Add Google Analytics module"
git push origin master

内容的提问来源于stack exchange,提问作者duncanf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 12:24:46