Github 操作:Git diff master...HEAD fatal:没有合并基础

Luz*_*uze 15 git github-actions

一些背景

长话短说:jest --changedSince=master当我打开一个新的拉取请求时,我正在尝试运行。jest ChangedSince 标志git diff master...HEAD在后台运行。这导致了一个我似乎无法理解的错误。

现在的情况

为了调试这个,我有一个Github Action与以下内容非常相似的步骤:

runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - run: |
        git fetch --no-tags --depth=1 origin master
        git checkout -t origin/master
        git checkout pull/1/merge
        git diff master...HEAD
Run Code Online (Sandbox Code Playgroud)

这会导致以下错误(这与 Jest 返回的错误相同):

fatal: refs/remotes/origin/master...HEAD: no merge base
Run Code Online (Sandbox Code Playgroud)

我尝试过的

当我在本地运行它时,问题不会发生(想象一下)。我确实意识到这里最大的问题很可能是该actions/checkout@2操作没有获取整个存储库。这就是我添加git fetch&git checkout -t origin/masterpull/1/merge命令的原因。

我确实尝试运行git branch -a调试是否按预期工作,结果如下:

* (HEAD detached at pull/1/merge)
  master
  remotes/origin/master
  remotes/pull/1/merge
Run Code Online (Sandbox Code Playgroud)

运行所需的所有参考git diff master...HEAD似乎都可以在操作中使用。

我还尝试检查实际ref返回是否正确:我git show-ref master在返回的操作中运行:

<commit-sha> refs/heads/master
<commit-sha> refs/remotes/origin/master
Run Code Online (Sandbox Code Playgroud)

我不知道什么可能会导致这个问题,任何想法都将不胜感激!

LeG*_*GEC 19

master如果您想探索和的历史HEAD(如:找到这两个提交的合并基础),您不能将您的克隆/获取操作限制为浅克隆 -depth=1至少不能。

尝试在您的配置中进行设置fetch-depth: 0(或可能)(如项目的自述文件中所述),并在运行时删除(或将其设置为更高的值)。fetch-depth: 1000 # a high enough numberaction/checkout@v2--depth=1git fetch origin master


另一种方法可能是通过 GitHub API 获取此类信息,而不是查询本地克隆。