<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[基于分支的完整工作流程示例]]></title><description><![CDATA[<h1>基于分支的完整工作流程示例</h1>
<h2>场景1：功能开发分支</h2>
<h3>分支创建</h3>
<pre><code class="language-bash">git checkout master
git pull
git checkout -b feature/TG-1022-add-tel-to-sale
</code></pre>
<h3>开发完成后签入</h3>
<pre><code class="language-bash">git add .
git commit -m "feat: add telephone field to sale module"
git push origin feature/TG-1022-add-tel-to-sale
</code></pre>
<h3>CI/CD 流程</h3>
<h4>1. Setup 阶段</h4>
<ul>
<li>生成版本号：<code>2855.2026.104.12345</code></li>
<li>判断分支：<code>feature/TG-1022-add-tel-to-sale</code> → <code>ENVIRONMENT=development</code></li>
<li>下载配置：<code>https://version.lodatone.com/erp1.0/development/urls.txt</code></li>
</ul>
<h4>2. Build 阶段</h4>
<ul>
<li>使用开发环境的 <code>Directory.Build.props</code></li>
<li>构建 NuGet 包：<code>Loda.Erp.Sales.2855.2026.104.12345.nupkg</code></li>
</ul>
<h4>3. Push NuGet 阶段</h4>
<ul>
<li>推送到 NuGet 仓库</li>
</ul>
<h4>4. Update Version 阶段</h4>
<ul>
<li>调用 API：<pre><code>GET /updateversion/erp1.0/Loda.Erp.Sales/2855.2026.104.12345/development
</code></pre>
</li>
<li>更新文件：<pre><code>wwwroot/erp1.0/development/version-numbers/Loda.Erp.Sales.props
wwwroot/erp1.0/development/Directory.Build.props
</code></pre>
</li>
</ul>
<h4>5. Deploy 阶段（Docker 示例）</h4>
<p dir="auto"><strong>deploy-dev（自动执行）</strong></p>
<pre><code class="language-yaml">部署到开发环境:
  stage: deploy-dev
  extends: .deploy-docker-base
  environment:
    name: development
  variables:
    DEPLOY_SSH_HOST: "10.0.3.204"
    HOST_PORT_OFFSET: "0"
  rules:
    - if: '$CI_COMMIT_BRANCH =~ /^(develop|next|feature\/|bugfix\/|fix\/)/'
      when: on_success
</code></pre>
<p dir="auto"><strong>deploy-test（手动执行）</strong></p>
<pre><code class="language-yaml">部署到测试环境:
  stage: deploy-test
  extends: .deploy-docker-base
  environment:
    name: test
  variables:
    DEPLOY_SSH_HOST: "10.0.3.204"
    HOST_PORT_OFFSET: "1"
  when: manual
  rules:
    - if: '$CI_COMMIT_BRANCH =~ /^(develop|next|feature\/|bugfix\/|fix\/)/'
</code></pre>
<h2>场景2：生产分支发布</h2>
<h3>代码合并到 master</h3>
<pre><code class="language-bash">git checkout master
git pull
git merge feature/TG-1022-add-tel-to-sale
git push origin master
</code></pre>
<h3>CI/CD 流程</h3>
<h4>1. Setup 阶段</h4>
<ul>
<li>生成版本号：<code>2855.2026.104.12346</code></li>
<li>判断分支：<code>master</code> → <code>ENVIRONMENT=production</code></li>
<li>下载配置：<code>https://version.lodatone.com/erp1.0/production/urls.txt</code></li>
</ul>
<h4>2. Build 阶段</h4>
<ul>
<li>使用生产环境的 <code>Directory.Build.props</code></li>
<li>构建 NuGet 包：<code>Loda.Erp.Sales.2855.2026.104.12346.nupkg</code></li>
</ul>
<h4>3. Push NuGet 阶段</h4>
<ul>
<li>推送到 NuGet 仓库</li>
</ul>
<h4>4. Update Version 阶段</h4>
<ul>
<li>调用 API：<pre><code>GET /updateversion/erp1.0/Loda.Erp.Sales/2855.2026.104.12346/production
</code></pre>
</li>
<li>更新文件：<pre><code>wwwroot/erp1.0/production/version-numbers/Loda.Erp.Sales.props
wwwroot/erp1.0/production/Directory.Build.props
</code></pre>
</li>
</ul>
<h4>5. Deploy 阶段（Docker 示例）</h4>
<p dir="auto"><strong>deploy-staging（手动执行）</strong></p>
<pre><code class="language-yaml">部署到准正式环境:
  stage: deploy-staging
  extends: .deploy-docker-base
  environment:
    name: staging
  variables:
    DEPLOY_SSH_HOST: "10.0.3.202"
    HOST_PORT_OFFSET: "2"
  when: manual
  rules:
    - if: '$CI_COMMIT_BRANCH == "master" || $CI_COMMIT_BRANCH == "main"'
</code></pre>
<p dir="auto"><strong>deploy-production（手动执行）</strong></p>
<pre><code class="language-yaml">部署到正式环境-服务器1:
  stage: deploy-production
  extends: .deploy-docker-base
  environment:
    name: production
  variables:
    DEPLOY_SSH_HOST: "10.0.3.201"
    HOST_PORT_OFFSET: "3"
  when: manual
  rules:
    - if: '$CI_COMMIT_BRANCH == "master" || $CI_COMMIT_BRANCH == "main"'

部署到正式环境-服务器2:
  stage: deploy-production
  extends: .deploy-docker-base
  environment:
    name: production
  variables:
    DEPLOY_SSH_HOST: "10.0.3.202"
    HOST_PORT_OFFSET: "3"
  when: manual
  rules:
    - if: '$CI_COMMIT_BRANCH == "master" || $CI_COMMIT_BRANCH == "main"'
</code></pre>
<h2>场景3：紧急修复（hotfix）</h2>
<h3>创建 hotfix 分支</h3>
<pre><code class="language-bash">git checkout master
git pull
git checkout -b hotfix/TG-1025-fix-critical-bug
</code></pre>
<h3>CI/CD 流程</h3>
<ul>
<li><strong>环境判断</strong>：<code>hotfix/*</code> → <code>ENVIRONMENT=production</code></li>
<li><strong>版本号写入</strong>：<code>wwwroot/erp1.0/production/</code></li>
<li><strong>部署 stage</strong>：只有 <code>deploy-staging</code> 和 <code>deploy-production</code></li>
</ul>
<h2>完整的 .gitlab-ci.yml 示例</h2>
<pre><code class="language-yaml">include:
  - remote: 'https://gitee.com/dotnet-geek/gitlab-ci/raw/master/docker-deploy.yml'
  - project: 'deploy/env-config'
    ref: master
    file: 'docker/products/erp1.0-sales/all.yml'

variables:
  PRODUCT_NAME: "erp1.0"
  COMPONENT_NAME: "Loda.Erp.Sales"
  DOCKERFILE_PATH: "src/Loda.Erp.Sales.Web/Dockerfile"
  DOCKER_IMAGE_REPO: "docker.lodatone.com/erp1.0-sales"
  CONTAINER_BASENAME: "erp1.0-sales"
  CONTAINER_PORT: "8080"

# stages 会从 docker-deploy.yml 继承
# - setup
# - build
# - push-nupkg
# - update-version
# - deploy-dev
# - deploy-test
# - deploy-staging
# - deploy-production
</code></pre>
<h2>版本号文件结构</h2>
<h3>开发环境</h3>
<pre><code>wwwroot/erp1.0/development/
├── Directory.Build.props          # 包含所有组件的版本号
├── urls.txt                       # 所有 .props 文件的 URL 列表
└── version-numbers/
    ├── Loda.Erp.Sales.props      # 2855.2026.104.12345
    ├── Loda.Erp.Purchase.props   # 2855.2026.103.12300
    └── ...
</code></pre>
<h3>生产环境</h3>
<pre><code>wwwroot/erp1.0/production/
├── Directory.Build.props          # 包含所有组件的版本号
├── urls.txt                       # 所有 .props 文件的 URL 列表
└── version-numbers/
    ├── Loda.Erp.Sales.props      # 2855.2026.104.12346
    ├── Loda.Erp.Purchase.props   # 2855.2026.103.12301
    └── ...
</code></pre>
<h2>优势总结</h2>
<ol>
<li><strong>环境隔离</strong>：开发分支不会影响生产环境的版本号</li>
<li><strong>并行开发</strong>：多个 feature 分支可以同时开发，共享开发环境的版本号</li>
<li><strong>灵活部署</strong>：
<ul>
<li>开发分支：自动部署到 dev，手动部署到 test</li>
<li>生产分支：手动部署到 staging 和 production（安全考虑，需要人工确认）</li>
</ul>
</li>
<li><strong>版本追溯</strong>：每个环境都有独立的版本号历史</li>
<li><strong>安全性</strong>：生产环境的部署必须手动触发</li>
</ol>
<h2>注意事项</h2>
<ol>
<li><strong>开发环境版本号更新频繁</strong>：每次 feature 分支推送都会更新</li>
<li><strong>生产环境版本号稳定</strong>：只有 master/main/hotfix 分支才会更新</li>
<li><strong>版本号独立演进</strong>：开发和生产环境的版本号各自独立，无需同步</li>
<li><strong>分支命名规范</strong>：严格遵守分支命名规范，确保自动判断正确</li>
</ol>
<h2>常见问题</h2>
<h3>Q1: 为什么 staging 不自动部署？</h3>
<p dir="auto"><strong>A:</strong> 出于安全考虑：</p>
<ul>
<li>staging 是生产环境的镜像，是最后的质量关卡</li>
<li>需要团队 leader 或 QA 人工确认后再部署</li>
<li>防止未经验证的代码进入类生产环境</li>
</ul>
<p dir="auto"><strong>如果你的团队有不同的流程</strong>，可以修改为自动部署：</p>
<pre><code class="language-yaml">部署到准正式环境:
  when: on_success  # 改为自动部署
</code></pre>
<h3>Q2: 开发环境和生产环境的版本号是什么关系？</h3>
<p dir="auto"><strong>A:</strong> 两个环境的版本号<strong>完全独立</strong>，各自演进：</p>
<p dir="auto"><strong>工作流程</strong>：</p>
<ol>
<li>新功能开发时，<strong>必须从 master 分支创建 feature 分支</strong></li>
<li>feature 分支第一次构建时，会下载<strong>开发环境</strong>的 <code>Directory.Build.props</code></li>
<li>这个开发环境的配置文件，最初应该是从生产环境复制过来的（手动初始化）</li>
<li>之后，开发环境和生产环境各自独立更新</li>
</ol>
<p dir="auto"><strong>初始化开发环境</strong>（只需要做一次）：</p>
<pre><code class="language-powershell"># 在版本号服务器上执行（首次设置时）
# 将生产环境的稳定版本复制到开发环境作为起点
xcopy wwwroot\erp1.0\production\*.* wwwroot\erp1.0\development\ /E /I /Y
</code></pre>
<p dir="auto"><strong>之后的演进</strong>：</p>
<ul>
<li>开发环境：每次 feature 分支推送都会更新版本号（快速迭代）</li>
<li>生产环境：只有 master 分支推送才会更新版本号（稳定版本）</li>
<li>两者不需要再同步，各自独立</li>
</ul>
<h3>Q3: 如果多个 feature 分支同时开发，版本号会冲突吗？</h3>
<p dir="auto"><strong>A:</strong> 不会冲突，因为：</p>
<ul>
<li>每个分支推送时都会生成新的版本号（基于 pipeline ID）</li>
<li>所有 feature 分支共享开发环境的版本号</li>
<li>后推送的分支会使用最新的版本号</li>
<li>这是正常的并行开发模式</li>
</ul>
<h3>Q4: 开发分支部署，只需要 dev 和 test，不需要 staging 和 production 吗？这是最佳实践吗？</h3>
<p dir="auto"><strong>A:</strong> 大多数团队的“默认最佳实践”确实是：</p>
<ul>
<li><strong>开发分支（develop/feature/bugfix）</strong> 主要面向研发自测与联调，所以一般只需要 <strong>dev/test</strong>。</li>
<li><strong>staging/production</strong> 更偏向“发布链路”，通常由 <strong>master/main/hotfix</strong> 触发。</li>
</ul>
<p dir="auto">背后的行业共识是：</p>
<ul>
<li><strong>环境职责清晰</strong>：dev/test 用于快速迭代；staging 用于发布前的最后验收；production 用于真实用户。</li>
<li><strong>风险隔离</strong>：feature 分支不应该占用发布资源/发布窗口，也不应该频繁污染 staging。</li>
<li><strong>权限与审计</strong>：staging/production 通常需要更严格的权限控制、审批和变更记录。</li>
</ul>
<p dir="auto">但也有例外（不算“反常”）：</p>
<ul>
<li>你希望每次合并到 <code>develop</code> 都自动部署到 staging 做持续验收（有专门的 QA 流程）。</li>
<li>你们没有 staging，只用 test 充当准正式。</li>
</ul>
<p dir="auto">所以它算是<strong>业界常见的默认实践</strong>，但不是唯一答案；关键是让环境的“职责”稳定、团队共识一致。</p>
<h3>Q5: master/main/hotfix 分支，就不需要 dev 和 test 了吗？这是最佳实践吗？</h3>
<p dir="auto"><strong>A:</strong> 通常是的：</p>
<ul>
<li><strong>master/main/hotfix</strong> 代表“可发布”的稳定线，部署链路一般是 <strong>staging -&gt; production</strong>。</li>
<li><strong>dev/test</strong> 主要服务开发过程，master/main/hotfix 不一定需要再走一遍。</li>
</ul>
<p dir="auto">不过这里有一个容易混淆的点：</p>
<ul>
<li><strong>master/main 的构建产物</strong>（镜像/包）仍然建议先部署到 staging 做一次最终验证。</li>
<li>dev/test 更像“开发过程环境”，staging/production 更像“发布过程环境”。</li>
</ul>
<p dir="auto">如果你们想更严格，也可以要求 master/main 在进入 staging 前，必须保证：</p>
<ul>
<li>MR/PR 已经在 feature 分支通过 dev/test 验证；</li>
<li>master/main pipeline 只做“复现式验证”（staging）+ “发布”。</li>
</ul>
<h2>生产 Docker 回滚：如何优雅地通过流水线回滚到上一个版本？</h2>
<h3>原则（最佳实践）</h3>
<ol>
<li>
<p dir="auto"><strong>镜像不可变</strong>：生产环境部署必须使用不可变标识。</p>
<ul>
<li>推荐使用 <strong>镜像 digest</strong>（例如 <code>repo@sha256:...</code>），或者使用<strong>永不复用</strong>的 tag（例如 <code>v2026.0104.12345</code> / <code>${CI_PIPELINE_ID}</code>）。</li>
<li>不推荐用 <code>latest</code> 这种会漂移的 tag 作为生产部署依据。</li>
</ul>
</li>
<li>
<p dir="auto"><strong>回滚=重新部署一个“已知好的镜像”</strong>：生产回滚不做“源码回退再重发”，而是直接把服务切回上一个稳定镜像。</p>
</li>
<li>
<p dir="auto"><strong>把“上一次成功部署的镜像标识”记录下来</strong>：</p>
<ul>
<li>记录到服务器（如 <code>/data/&lt;app&gt;/last_successful_image.txt</code>）</li>
<li>或记录到版本号服务/配置仓库</li>
<li>或记录到 GitLab Environment/Deployment（如果你们用 GitLab Environments）</li>
</ul>
</li>
</ol>
<h3>一种可落地的流水线方案（推荐）</h3>
<p dir="auto">在生产部署 job 成功后：</p>
<ul>
<li>把本次部署使用的 <code>IMAGE</code>（tag 或 digest）写到远端服务器某个文件（例如：<code>current_image.txt</code>）</li>
<li>同时把上一次的 <code>current_image.txt</code> 备份为 <code>previous_image.txt</code></li>
</ul>
<p dir="auto">当需要回滚时：</p>
<ul>
<li>触发一个 <strong>手动 job：回滚到上一个版本</strong></li>
<li>它读取 <code>previous_image.txt</code>，然后用该镜像重新 <code>docker compose up -d</code> 或 <code>docker service update</code></li>
</ul>
<h3>回滚 job 在流水线里的表现</h3>
<p dir="auto">你可以提供两种回滚方式：</p>
<ul>
<li><strong>回滚到上一个版本</strong>：无需输入参数（最常用）</li>
<li><strong>回滚到指定版本</strong>：手动输入 <code>TARGET_IMAGE</code>（应急时非常好用）</li>
</ul>
<h3>注意事项</h3>
<ul>
<li>回滚前最好先做一次健康检查确认“当前版本确实异常”。</li>
<li>回滚成功后，建议把“故障版本”标记出来（例如打一个 Git tag 或在变更记录里写清楚）。</li>
<li>如果你的部署模板目前没有“记录 current/previous 镜像”能力，那么需要在 <code>docker/deploy.yml</code> 中增加这段能力（这属于模板层的增强）。</li>
</ul>
]]></description><link>https://talk.loda.net/topic/37/基于分支的完整工作流程示例</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 12:49:01 GMT</lastBuildDate><atom:link href="https://talk.loda.net/topic/37.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 03 Jan 2026 17:38:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 基于分支的完整工作流程示例 on Thu, 15 Jan 2026 17:18:04 GMT]]></title><description><![CDATA[<p dir="auto">Git 中常见的三种整合策略简单说明如下（都是把功能分支合进目标分支，只是历史呈现不同）：</p>
<ol>
<li>
<p dir="auto"><strong>Merge（普通合并）</strong></p>
<ul>
<li>保留双方原始提交，再生成一个新的合并提交。</li>
<li>优点：历史完整、不改写已有提交；缺点：分支图会出现分叉。</li>
<li>场景：多人协作、需要保留完整记录时的默认做法。</li>
</ul>
</li>
<li>
<p dir="auto"><strong>Rebase（变基）</strong></p>
<ul>
<li>把功能分支的提交“搬到”目标分支最新提交之后，好像一直基于它开发。</li>
<li>优点：历史呈线性，很干净；缺点：会改写提交哈希，容易引发冲突，不适合已推送共享的分支。</li>
</ul>
</li>
<li>
<p dir="auto"><strong>Squash（压缩合并）</strong></p>
<ul>
<li>把功能分支所有提交压成一个提交再合并。</li>
<li>优点：目标分支历史简洁；缺点：功能分支内部的细节提交丢失，回溯困难。</li>
<li>场景：功能分支提交非常琐碎、只想留一个总结提交时使用。</li>
</ul>
</li>
</ol>
<p dir="auto">如果你没有特别需求，建议直接使用 <strong>Merge</strong>，操作相对安全，也符合大多数团队习惯。<br />
下一步请告诉我要合并的功能分支是哪个（比如 <code>feature/LT-94-friendly-timeout-error</code>），我就按 Merge 流程帮你在 <code>develop</code>、<code>master</code> 分支各合并一次并提交。</p>
]]></description><link>https://talk.loda.net/post/94</link><guid isPermaLink="true">https://talk.loda.net/post/94</guid><dc:creator><![CDATA[zhongfangxiong]]></dc:creator><pubDate>Thu, 15 Jan 2026 17:18:04 GMT</pubDate></item><item><title><![CDATA[Reply to 基于分支的完整工作流程示例 on Thu, 15 Jan 2026 16:55:32 GMT]]></title><description><![CDATA[<p dir="auto">这个如何监管呢？感觉非常容易失控</p>
<p dir="auto">要防止 hotfix（或任何分支）漏合、乱合，可以用这几层手段来“硬管控”：</p>
<ol>
<li>
<p dir="auto"><strong>CI 强校验（GitLab CI / Pipelines）</strong></p>
<ul>
<li>在所有 MR Pipeline 里检查：
<ul>
<li>分支名必须匹配 <code>hotfix/&lt;KEY&gt;-...</code>、<code>feature/&lt;KEY&gt;-...</code> 等；</li>
<li>Commit message 第一行含合法 Key；</li>
<li>MR 的目标分支符合策略（hotfix 指向 master，但合并后有后续任务指向 develop）。</li>
</ul>
</li>
<li>若校验不通过直接失败，阻止合并。</li>
</ul>
</li>
<li>
<p dir="auto"><strong>Protected Branch + Merge Request 流程</strong></p>
<ul>
<li>保护 <code>master</code>/<code>develop</code> 分支，只允许通过 MR（且 Pipeline 通过）才能合并；</li>
<li>禁止直接 push到受保护分支；</li>
<li>设定最少一名 Reviewer 审核，确保每次 hotfix 在 master 合并后，会马上安排一个“同步 develop”的 MR（可用模板提醒）。</li>
</ul>
</li>
<li>
<p dir="auto"><strong>自动化同步提醒</strong></p>
<ul>
<li>在仓库里加脚本或机器人（如 GitLab Bot）检测 hotfix MR 合并后，若一定时间内没有对应 develop MR，就自动发提醒/创建 issue；</li>
<li>或者把“同步 develop”写进 MR 模板、Checklist，审核人必须勾选才能通过。</li>
</ul>
</li>
<li>
<p dir="auto"><strong>分支策略文档化 + 周会 Review</strong></p>
<ul>
<li>把流程写进规则（已经有），再结合例行的改动审查（如周会 review 最近 master 合并），一旦发现直接在 master 改动，就定位责任人并要求补齐流程，形成约束氛围。</li>
</ul>
</li>
<li>
<p dir="auto"><strong>工具辅助</strong></p>
<ul>
<li>使用 GitLab Hooks/服务器端脚本，在 master 合并后自动检测是否存在同一 Key 的 develop MR，如果没有，自动创建任务/issue。</li>
<li>若资源允许，可引入 “multi-target merge” 脚本：hotfix MR 合并 master 后自动触发一个脚本，把同一 commit cherry-pick 到 develop 并发 MR。</li>
</ul>
</li>
</ol>
<p dir="auto">只要 CI + 受保护分支 + 审核流程严格执行，再辅以提醒/自动化，就能把“确保 master/develop 都包含 hotfix”变成硬性要求，基本不会失控。</p>
]]></description><link>https://talk.loda.net/post/93</link><guid isPermaLink="true">https://talk.loda.net/post/93</guid><dc:creator><![CDATA[zhongfangxiong]]></dc:creator><pubDate>Thu, 15 Jan 2026 16:55:32 GMT</pubDate></item><item><title><![CDATA[Reply to 基于分支的完整工作流程示例 on Thu, 15 Jan 2026 16:55:09 GMT]]></title><description><![CDATA[<p dir="auto">但是hotfix的代码，最终也是要合并到develop和master？</p>
<p dir="auto">是的，流程是这样的：</p>
<ul>
<li><strong>hotfix 分支</strong>代表紧急修复，通常从 <code>master</code> 切出（确保基准与线上一致）。</li>
<li>完成修复后，<strong>先合并回 <code>master</code></strong>（恢复线上），同时需要<strong>把同一修复再合并回 <code>develop</code></strong>，否则开发分支缺少这次补丁，后续再从 <code>develop</code> 合回 <code>master</code> 时容易把修复覆盖掉。</li>
</ul>
<p dir="auto">所以“最终 master 和 develop 都要包含 hotfix 的代码”是硬性要求，这样才能保持所有环境一致、避免回归。</p>
]]></description><link>https://talk.loda.net/post/92</link><guid isPermaLink="true">https://talk.loda.net/post/92</guid><dc:creator><![CDATA[zhongfangxiong]]></dc:creator><pubDate>Thu, 15 Jan 2026 16:55:09 GMT</pubDate></item><item><title><![CDATA[Reply to 基于分支的完整工作流程示例 on Thu, 15 Jan 2026 14:21:15 GMT]]></title><description><![CDATA[<p dir="auto">WindSurf自动感知/使用工作区的规则，为我生成了有Key的注释：</p>
<p dir="auto"><img src="/assets/uploads/files/1768486799948-8511df5b-eb98-49b2-a454-4d8baf6395cc-image.png" alt="image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">因为我更新（保存）了工作区的规则如下：</p>
<p dir="auto"><img src="/assets/uploads/files/1768486841079-e5cc0bab-1ab9-40e2-adff-0109377ecba8-image.png" alt="image.png" class=" img-fluid img-markdown" /></p>
]]></description><link>https://talk.loda.net/post/91</link><guid isPermaLink="true">https://talk.loda.net/post/91</guid><dc:creator><![CDATA[zhongfangxiong]]></dc:creator><pubDate>Thu, 15 Jan 2026 14:21:15 GMT</pubDate></item><item><title><![CDATA[Reply to 基于分支的完整工作流程示例 on Thu, 15 Jan 2026 13:14:01 GMT]]></title><description><![CDATA[<p dir="auto">我在WindSurf里，设置了“全局规则”以后，IDE会自动为我准备完美git语句：</p>
<p dir="auto"><img src="/assets/uploads/files/1768482839998-9db57b51-d3eb-4fc4-a1f9-7c41752e9d82-image.png" alt="image.png" class=" img-fluid img-markdown" /></p>
]]></description><link>https://talk.loda.net/post/90</link><guid isPermaLink="true">https://talk.loda.net/post/90</guid><dc:creator><![CDATA[zhongfangxiong]]></dc:creator><pubDate>Thu, 15 Jan 2026 13:14:01 GMT</pubDate></item></channel></rss>