迁移至 MQL5 Algo Forge(第 4 部分):使用版本和发布·进阶篇
🌿

迁移至 MQL5 Algo Forge(第 4 部分):使用版本和发布·进阶篇

(2/3)· 派生改完代码只是起点,发布前弄丢分支指针的人远比你想象的多

含代码示例偏理论 第 2/3 篇
很多人以为删了 Git 分支就等于代码没了,于是不敢清理仓库,结果主干旁挂满废弃分支自己都分不清。其实分支只是指向提交链的指针,提交本身还躺在仓库里,只是你不会找回来而已。

「HEAD 指针到底指向哪儿」

Git 里有个固定名字叫 HEAD 的指针,它不算标签,却总跟着当前签出的分支跑,自动停在那个分支最新的提交上。它实质是“你现在在仓库哪个位置”的答案,物理上存在 .git/HEAD 文件里,内容要么是符号引用(分支或标签名),要么是裸提交哈希。 切换分支时 HEAD 会自己更新;一旦你提交新内容,Git 建好提交对象后还会把 HEAD 挪过去。命令里可以直接写 HEAD 代替长哈希或分支名,用 HEAD~2 这种写法就能指最近提交往前数两步的那一笔,不用死记哈希。 仓库通常处在 attached HEAD 状态,新提交规规矩矩接在当前分支最新提交之后,编辑按序叠加、不打架。另一种 detached HEAD 就麻烦些:HEAD 直接钉在某个不是最新的提交上,比如 git checkout <commit-hash>、git checkout tags/<tag-name>,或者切到本地删了但远程还在的分支 origin/<branch-name> 都会触发。 这种游离状态能避则避——切去别的分支时,里头没挂任何分支的改动大概率直接丢。要是你只打算翻历史不改东西,暂留一下也无妨,但别手痒提交。

◍ 切到旧提交会掉进 detached HEAD

把本地仓库切到某个过去的提交,在日常 Git 流程里很少见。比如那个曾属于已删分支 article-17698-forge2 的最新提交,它其实还在 develop 分支历史里,只是后面已经有了更新的提交,不再是顶端。 用命令行强行切过去能成功,但仓库会进入 detached HEAD 状态,Git 会明确警告你 HEAD 不再指向任何分支顶端。 有个细节容易让人疑惑:截图里切的提交哈希是 58beccf233,Git 却报 HEAD 在 58beccf。这不是丢失了三位,而是 Git 允许用缩短哈希,只要仓库内唯一,界面常显示 4 到 10 个字符。 要拿完整 40 位哈希,跑一次 git log 即可。因为哈希随机唯一生成,前几位几乎必然不同,所以短前缀通常就够 Git 精确定位提交。

把旧 MQL5 文件从 UTF-16LE 转成 UTF-8

MetaEditor 早期版本用 UTF-16LE 存源码,Git 会把它当二进制——提交里只能看到文件前后体积变化,没法 diff 具体改了哪行。Visual Studio Code 本地能读,但仓库网页端(如 MQL5 Algo Forge)只显示「大小从 X 字节变为 Y 字节」,定位改动基本靠猜。 新版本 MetaEditor 新建文件默认 UTF-8,即便写俄文、中文等字母也不再自动跳回 UTF-16LE。手头若有老项目残留的 UTF-16LE 文件,用编辑器转存为 UTF-8 后推一次 commit,之后网页端就能逐行高亮变更,哪行哪列动了看得一清二楚。 外汇与贵金属 EA 开发涉及杠杆与滑点,代码版本失控可能直接把旧逻辑带进实盘,风险不低。转编码这步不复杂,但能省掉后期扒变更的瞎忙。

「把 develop 的更新并回未完工分支」

仓库里 article-17608-close-manager 和 article-17607 这两条分支还挂着没合进 develop,因为对应任务没收口。先挑 article-17607 往下做,做到逻辑完成点再并回主干,最终打版本标签。 切过去之前得先把 develop 上已合并的稳定改动拉进 article-17607。反向合并(稳定代码进新代码分支)用 Git 控制台命令比 Web 合并请求更顺手,后者适合把未测代码并进稳定分支的场景。 当前 HEAD 在 article-19436-forge3,git status 显示与远程同步。执行 git checkout article-17607 切换,再 git merge develop——由于外部改动只碰到我们没动过的文件,无冲突,Git 自动建了一个合并提交。 git push 之后去远程看,最后一次提交就是 develop 与 article-17607 的合并节点。article-19436-forge3 仍是自由端,工作没完,先搁着,时机到了再回来。 至此 article-17607 已具备继续编码的条件,具体任务解法在别处讲,这里只交代收尾前怎么定版和留痕。

让小布替你跑这套
这些分支恢复与编码检查的流程,小布盯盘的 AIGC 已内置常用诊断模板,打开对应品种页即可看到提交树异常提示,把重复劳动交给小布,你专注决策。

常见问题

能。分支只是指向连续提交链最新节点的指针,删除分支不会删除提交本身,通过提交哈希在网页界面提交树页面仍可定位并重建分支。
不合并清理,仓库会积累大量临时分支,作者本人也容易迷失结构;合并回主线后删除可保持仓库可读,同时保留提交历史供回溯。
可以。小布盯盘内置了部分 AIGC 诊断能力,能提示提交树中的悬空提交或编码异常,减少人工翻网页界面的负担。
HEAD 是当前所在分支最新提交的引用符号,它随检出分支而移动;理解 HEAD 才能明白为何删分支后仍能借提交哈希回到旧状态。
非 UTF-8 保存的源码在 Web 界面 diff 与合并时易出现乱码导致评审失误,统一 UTF-8 是跨作者协作发布的基础规范。