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

如何在GitHub Actions中仅获取分支起点后的修改文件?

解决方案

问题出在你使用的三点式diff(A...B)会对比两个提交的公共祖先到各自HEAD的所有变更,当主分支有新提交后,base.sha是更新后的主分支HEAD,三点diff会同时包含主分支新增的文件和你的分支修改的文件。要只检查你的分支从主分支分叉后的修改,需要用两点式diff对比你的分支HEAD和你分支与主分支的合并基点(merge base)。

具体修改步骤:

  • 先通过git merge-base命令获取你的分支与主分支的合并基点SHA
  • 用两点式diff(merge_base..head)只筛选你的分支上的修改文件

修改后的Run lint步骤代码如下:

- name: Run lint
  run: |
    cp ${{ env.DIR }}/lint-checker/{.prettierignore,.prettierrc} .
    # 获取当前分支与主分支的合并基点SHA
    MERGE_BASE=$(git merge-base ${{ github.event.pull_request.base.sha }} ${{ github.sha }})
    # 使用两点diff仅筛选当前分支从分叉点开始的修改文件
    npx eslint --c ${{ env.DIR }}/lint-checker/.eslintrc.js --quiet --no-eslintrc --rulesdir ${{ env.DIR }}/lint-checker/custom-rules $(git diff --name-only --diff-filter=ACM -r $MERGE_BASE..${{ github.sha }} '*.ts' '*.js')

额外注意事项:

  • 如果你的仓库在GitHub Actions中使用了浅克隆(默认fetch-depth: 1),可能导致git merge-base无法找到合并基点,此时需要在actions/checkout步骤中添加fetch-depth: 0拉取完整历史:
- name: Checkout code
  uses: actions/checkout@v4
  with:
    fetch-depth: 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:05:05