如何在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
相关产品推荐
相关产品推荐

