Skip to main content

Fehlerbehebung von erforderlichen Statuschecks

Du kannst nach häufig auftretenden Fehlern suchen und Probleme mit erforderlichen Statusüberprüfungen beheben.

Wer kann dieses Feature verwenden?

Geschützte Branches sind in öffentlichen Repositories mit GitHub Free und GitHub Free für Organisationen verfügbar. Geschützte Branches sind auch in öffentlichen und privaten Repositorys mit GitHub Pro, GitHub Team, GitHub Enterprise Cloud und GitHub Enterprise Server verfügbar. Weitere Informationen findest du unter Pläne von GitHub.

Wenn du eine Prüfung und einen Status mit dem gleichen Namen hast und diesen Namen als erforderlichen Statuscheck auswählst, sind sowohl die Prüfung als auch der Status erforderlich. Weitere Informationen finden Sie unter REST-API-Endpunkte für Prüfungen.

Hinweis

Statusprüfungen müssen innerhalb des ausgewählten Repositorys in den letzten sieben Tagen erfolgreich abgeschlossen worden sein, damit sie erforderlich sein können.

Nachdem du die erforderlichen Statusüberprüfungen aktiviert hast, muss dein Branch vor dem Zusammenführen mit dem Basisbranch auf dem neuesten Stand gebracht werden. Dadurch wird sichergestellt, dass dein Branch mit dem neuesten Code aus dem Basisbranch getestet wurde. Wenn dein Branch veraltet ist, musst du den Basisbranch in deinen Branch zusammenführen. Weitere Informationen finden Sie unter Informationen zu geschützten Branches.

Hinweis

Sie können Ihren Branch auch mit dem Basisbranch unter Verwendung von Git-Rebase auf dem neuesten Stand bringen. Weitere Informationen finden Sie unter Informationen zu Git-Rebase.

Du kannst lokale Änderungen erst dann an einen geschützten Branch übertragen, wenn alle erforderlichen Statuschecks bestanden sind. Ansonsten wird eine Fehlermeldung ähnlich der folgenden ausgegeben.

remote: error: GH006: Protected branch update failed for refs/heads/main.
remote: error: Required status check "ci-build" is failing

Hinweis

Pull Requests, die auf dem neuesten Stand sind und die erforderlichen Statuschecks bestehen, können lokal gemergt und an den geschützten Branch gepusht werden. Dies kann ohne Statuschecks erfolgen, die auf dem Merge-Commit selbst ausgeführt werden.

Erforderliche Überprüfung muss für den neuesten Commit-SHA erfolgreich sein

Damit eine Pullanforderung zusammengeführt werden kann, müssen alle erforderlichen Prüfungen an die neueste Commit-SHA übergeben werden. Dadurch wird sichergestellt, dass die letzten Änderungen überprüft und die erforderlichen Standards vor dem Zusammenführen erfüllt werden. Prüfungen, die mit einem vorherigen Commit-SHA ausgelöst wurden, werden nicht als Teil der erforderlichen Prüfungen verwendet. Erfolgreiche Überprüfungsstatus sind success, skipped und neutral. Weitere Informationen finden Sie unter Informationen zu Statuschecks.

Konflikte zwischen dem Head-Commit und dem Test-Merge-Commit

Manchmal werden sich die Ergebnisse der Statuschecks für den Test-Merge-Commit und Head-Commit widersprechen. Wenn der Test-Merge-Commit einen Status hat, muss er bestehen. Anderenfalls muss der Status des Head-Commit bestanden sein, bevor du den Branch zusammenführen kannst.

Wenn ein Konflikt zwischen dem Test-Merge-Commit und dem Haupt-Commit besteht, werden die Überprüfungen für den Test-Merge-Commit im Feld für den Pull Request-Status angezeigt. Im Statusfeld des Pull Requests wird dies durch eine Zeile angezeigt, die mit Showing checks for the merge commit beginnt. Weitere Informationen zu Test-Merge-Commits findest du unter REST-API-Endpunkte für Pullanforderungen.

Verwaltung von übersprungenen, aber erforderlichen Überprüfungen

Warnung

Wenn ein Workflow aufgrund von Pfadfilterung, Branchfilterung oder einer Commitnachricht übersprungen wird, verbleiben diesem Workflow zugeordnete Überprüfungen im Status „Pending“. Eine Pull-Anfrage, bei der diese Prüfungen bestanden werden müssen, wird am Mergen gehindert.

Wenn jedoch ein Auftrag in einem Workflow aufgrund einer bedingten Bedingung übersprungen wird, meldet er seinen Status als „Erfolg“. Weitere Informationen finden Sie unter Steuern der Auftragsausführung mithilfe von Bedingungen.

Wenn ein Auftrag fehlschlägt, werden vom fehlgeschlagenen Auftrag abhängige Aufträge übersprungen, und es wird kein Fehler gemeldet. Ein Pull Request, für den die Überprüfung erforderlich ist, darf nicht blockiert werden. Wenn du eine erforderliche Überprüfung für einen Auftrag verwenden möchtest, der von anderen Aufträgen abhängt, verwende neben always() den bedingten Ausdruck needs. Weitere Informationen dazu findest du unter Verwenden von Aufträgen in einem Workflow.

Beispiel

Das folgende Beispiel zeigt einen Workflow, der einen „erfolgreichen“ Abschlussstatus für den Auftrag build erfordert, aber der Workflow wird übersprungen, wenn der Pull Request keine Dateien im Verzeichnis scripts ändert.

name: ci
on:
  pull_request:
    paths:
      - 'scripts/**'
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [12.x, 14.x, 16.x]
    steps:
    - uses: actions/checkout@v5
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v4
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm'
    - run: npm ci
    - run: npm run build --if-present
    - run: npm test

Aufgrund der Pfadfilterung wird ein Pull Request, der nur eine Datei im Stammverzeichnis des Repositorys ändert, diesen Workflow nicht auslösen und für das Mergen blockiert. Im Pull Request wird „Warten auf zu meldenden Status“ angezeigt.

Statusüberprüfungen mit GitHub Actions und einer Merge-Queue

Du musst das merge_group-Ereignis verwenden, um deinen GitHub Actions-Workflow auszulösen, wenn ein Pull Request einer Mergewarteschlange hinzugefügt wird.

Hinweis

Wenn Ihr Repository GitHub Actions verwendet, um erforderliche Prüfungen für Pull Requests in Ihrem Repository benötigen, müssen Sie die Workflows aktualisieren, um das merge_group Ereignis als zusätzlichen Auslöser einzubeziehen. Andernfalls werden Statusüberprüfungen nicht ausgelöst, wenn du einer Mergewarteschlange einen Pull Request hinzufügst. Der Merge ist nicht erfolgreich, da die erforderliche Statusüberprüfung nicht gemeldet wird. Das merge_group-Ereignis ist von den Ereignissen pull_request und push getrennt.

Ein Workflow, der eine Überprüfung meldet, die durch den Schutz der Zielbranch gefordert wird, sieht wie folgt aus:

on:
  pull_request:
  merge_group:

Weitere Informationen zum merge_group-Ereignis findest du unter Ereignisse zum Auslösen von Workflows.

Erforderliche Statusüberprüfungen aus unerwarteten Quellen

Es ist auch möglich, dass ein geschützter Branch eine Statusüberprüfung durch eine bestimmte GitHub App erfordert. Wenn eine Meldung wie die folgende angezeigt wird, solltest du überprüfen, ob die im Merge-Feld aufgeführte Überprüfung von der erwarteten App festgelegt wurde.

Required status check "build" was not set by the expected GitHub App.