当前位置: 首页 > news >正文

20260319-编程踩坑总结

在深度学习过程中发现训练代码会有很多个迭代的版本但是发现每次完成一个后发现有很多的版本,像极了项目的word 的版本管理(V1,V2,V2.1.....)无语,所以一定要用起来这种git的项目管理能力。

最近在本地修改一个目标检测项目(Moving-object-detection-DSFNet-main),写了一些代码后想推送到 GitHub,结果遇到了一连串报错。

问题 1:推送时报错src refspec main does not match any

报错信息:

bash

复制

$ git push -u origin main error: src refspec main does not match any error: failed to push some refs to 'https://github.com/rose686/xxx.git'

第一反应:以为是远程仓库地址错了,或者分支名拼写错误。

排查过程:

bash

复制

$ git branch # 没有任何输出...

这时候有点懵——为什么git branch会一片空白?仓库明明已经git init了,文件也都在。

关键发现:

bash

复制

$ git status On branch main No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: .gitignore new file: README.md new file: evaluation.py # ... 还有很多文件

恍然大悟:No commits yet!虽然git add .已经把文件放进暂存区了,但还没有做第一次commit。Git 的分支本质上是指向提交的指针,没有提交 = 没有分支 = 无法推送。

解决方案:

bash

复制

git commit -m "Initial commit" git push -u origin main

成功!远程仓库终于能看到代码了。


问题 2:分支管理混乱(0319exp vs 0319exp1)

推送成功后,我创建了实验分支0319exp想做一些改动测试。结果手滑,又多创建了一个0319exp1。看着 VS Code 状态栏上并列的三个分支名,突然有点焦虑——这算不算把仓库搞乱了?

用图查看分支关系:

bash

复制

$ git log --oneline --graph --all * f646f1d (HEAD -> main, origin/main, 0319exp) Initial commit

重要发现:main0319exp都指向同一个提交f646f1d。原来此时两个分支是完全相同的,它们只是同一个节点的不同标签而已。

清理思路:

  • 如果不需要0319exp1,可以直接删除:git branch -d 0319exp1

  • 如果要开始实验,先git checkout 0319exp,然后正常修改代码、commit,这样分支才会真正"分叉"


核心收获

  1. Git 的提交是根基
    以前以为git init+git add就能推送了,现在明白:没有 commit 的历史,就像没有地基的建筑,push 根本无从谈起。git branch不显示任何内容,正是因为 HEAD 还没指向任何具体的提交。

  2. 分支只是轻量级的指针
    看到main0319exp同时指向f646f1d时才真正理解:分支不是"复制"代码,只是一个指向提交的引用。创建分支成本极低,可以放心使用。

  3. 查看历史比盲目操作更重要
    git statusgit log --oneline --graph --all是排查问题的利器。前者告诉你现在在哪(工作区状态),后者告诉你整个仓库的拓扑结构。


给自己的备忘录

下次新建仓库的标准流程:

bash

复制

git init git add . git commit -m "Initial commit" # 千万别忘! git branch -M main # 确保分支名是 main git remote add origin <url> # 关联远程 git push -u origin main # 推送

以及:不要创建名字太像的分支0319exp0319exp1真的会把自己搞晕 😅

问题 3:如何正确创建和管理分支

虽然之前用git checkout -b 0319exp创建了分支,但对其中的原理和最佳实践还是一知半解。经过一番研究,终于理清了工作流。

创建分支的正确姿势

从当前分支(main)创建新分支

bash

复制

# 确保你在 main 上,并且代码是最新的 git checkout main git pull origin main # 如果是协作项目,先同步远程 # 创建并切换到新分支(推荐写法) git checkout -b 0319exp # 或者先创建再切换 git branch 0319exp # 创建 git checkout 0319exp # 切换

分支管理的实用命令

bash

复制

# 查看所有分支(本地+远程) git branch -a # 查看已合并到当前分支的分支(可以安全删除的) git branch --merged # 查看未合并的分支(删除时会警告) git branch --no-merged # 重命名分支(比如之前命名错了) git branch -m old-name new-name # 强制删除分支(如果改动没合并,普通删除会报错) git branch -D branch-name

关键认知转变:

  • 以前觉得分支很"重",不敢轻易创建 → 现在明白分支只是一个指针,轻量且廉价

  • 以前喜欢用日期命名 → 现在用功能命名,几个月后看分支名就知道做了什么

  • 以前怕合并冲突 → 现在明白只要勤 commit、勤 push、勤从 main 更新,冲突很容易解决

这次踩坑虽然花了半小时,但把 Git 的分支逻辑彻底理清楚了。以后遇到src refspec报错,第一反应就是检查git status看有没有 commit,而不是怀疑远程地址错了。

http://www.jsqmd.com/news/528759/

相关文章:

  • 跨平台实战:Windows/macOS同步部署OpenClaw与Qwen3.5-4B-Claude
  • Python百度搜索API:免费无限制的搜索引擎集成终极方案
  • 京东评论和评论数api接口
  • 4个步骤掌握PacketFence:构建企业级网络准入控制体系
  • 电源调试避坑实战:7个量产踩坑点+手把手教程,新手也能零失误
  • Python入门者的CasRel模型初体验:三行代码实现关系抽取
  • 3个技巧让智能提取字幕工具成为你的视频学习助手
  • Klipper 3D打印机固件故障诊断指南:从异常识别到根本解决
  • OpenClaw Skills管理实战:130+Agents环境下的技能共享与调用指南(建议收藏)
  • MedGemma 1.5应用指南:就医前如何用AI整理症状和问题
  • AD7790底层驱动设计:嵌入式Σ-Δ型ADC时序控制与低功耗实践
  • 74.基于springboot+vue的自习室预定系统
  • 2026最新OpenClaw安装教程,5分钟装好,打造专属自动化数字员工,龙虾军团一键召唤
  • 猫抓插件使用指南:解决网页资源获取难题的实用工具
  • PDF文档处理终极指南:开源PDF补丁丁完整使用教程
  • C语言——地址和指针
  • 终极数字填色画生成器:从图片到艺术品的完整指南
  • 探索D4RL:构建离线强化学习研究的完整指南
  • prisma的核心命令
  • 从ChatGPT到DeepSeek:5个真实业务场景,带你重新理解大模型评测的“有效性”
  • 国内知名的企业级Agent智能体厂商有哪些?2026年企业级AI Agent落地架构与主流厂商深度拆解
  • HG-ha/MTools物联网整合:嵌入智能终端设备的可能性
  • Bypass Paywalls Clean完全使用指南:从安装到高级配置
  • 数据安全必修课:开源工具实现数据备份与迁移的全流程防护指南
  • 云手机 批量管理工具
  • SpringBoot项目如何优雅实现Word模板导出?POI与EasyPoi对比评测
  • 2026年微波加热/烘干/干燥设备厂家推荐:上海楚尚机械有限公司,全系微波设备专业供应 - 品牌推荐官
  • 垂直裂缝下COMSOL水力压裂相场模拟:PDE接口与达西定律联合固体力学解析
  • 从科研到消费级:EEG技术如何通过Muse头环走进日常生活(含最新Muse S Athena评测)
  • 别再用ps aux硬扛了!用这套工业级Python内存泄漏检测工具,将平均定位时间从6.2小时压缩至97秒