653 字
3 分钟
Git上传时长时间未结束问题

问题描述#

刚刚用git push将本地仓库的commit推送到远程仓库,但是等了半天也也没有正常结束,终端里显示的内容如下:

Terminal window
git push
Enumerating objects: 30, done.
Counting objects: 100% (30/30), done.
Delta compression using up to 16 threads
Compressing objects: 100% (29/29), done.
Writing objects: 100% (29/29), 129.62 KiB | 902.00 KiB/s, done.
Total 29 (delta 2), reused 0 (delta 0), pack-reused 0
# 停在这里了,没有正常结束

判断哪个步骤出现问题#

git push的执行阶段:

  1. 本地准备阶段
    • 计算差异对象(显示 Counting objects
    • 压缩数据(显示 Compressing objects
  2. 网络传输阶段
    • 上传数据包(显示 Writing objects 和进度百分比)
  3. 远程更新阶段
    • 更新远程引用(显示 Updating references

我这里是卡在了远程更新阶段,Git 正在等待远程服务器确认并更新分支指针,等了大概10分钟,基本确认没办法正常结束了

解决过程#

首先尝试安全中断

Terminal window
kill -SIGTERM $(pgrep git)
# 也可以通过ps aux | grep -i git先获取git进程的进程id
# 再kill -SIGTERM <git进程ID>
# 输出如下:
[1] 186152 terminated git push
gitstatus_query_p9k_:print:68: write error: broken pipe
gitstatus_query_p9k_:print:68: write error: broken pipe
gitstatus_query_p9k_:print:68: write error: broken pipe

提示broken pipe,管道破裂错误,通常发生在:

  • 一个进程尝试写入已关闭的管道
  • 终端突然关闭
  • 命令被中断

我这里先检查一下本地对象完整性

Terminal window
git fsck
# 输出如下,说明git仓库中有一些悬空对象
git fsck
Checking object directories: 100% (256/256), done.
Checking objects: 100% (911/911), done.
dangling blob 1cb6fd942e97b87b9d02f692b32e535ebbcd90e4
dangling blob 3bd9bce7058fdf7b9809c5a87053a5270c6a75ea
dangling blob 455b36eb1a68c7d657db51ed3538cd6fcd96e8e0
dangling blob c7dc989f8044a4fcf16361414998e14694e1ac7e
  • 什么是悬空对象
    • 这些是存在于你的 Git 数据库(.git/objects)中,但没有任何分支、标签或其他引用指向它们的对象
    • 它们不再是你当前项目历史的一部分
  • 为什么会产生
    • 最常见的原因是:
      • 使用了 git add 但后来撤销了(如 git reset)
      • 进行了变基(rebase)或修改历史操作
      • 强制推送后丢弃的提交
      • 中断的 Git 操作
  • 这些 blob 是什么
    • blob 是 Git 存储文件内容的基本单位
    • 这些可能是你曾经暂存但未提交的文件内容

通过git show <blog hash>来查看悬空对象的实际内容,发现四个文件都是已经删除的废弃文件,说明本地对象完整性没有问题

清理远程失效引用

Terminal window
git remote prune origin

然后清理可能残留的进程

Terminal window
pkill -f "git-remote-https"

再启用详细日志重新推送到服务器

Terminal window
GIT_TRACE=1 GIT_TRACE_PACKET=1 git push --verbose
Git上传时长时间未结束问题
https://fuwari.cbba.top/posts/git上传时长时间未结束问题/
作者
Chen_Feng
发布于
2025-08-21
许可协议
CC BY-NC-SA 4.0