---
title: "Merge a review pull requestov — Git for Laravel | Roundly"
description: "Zatvárajte, schvaľujte a mergujte pull requesty pripnuté na head SHA, publikujte celé review s inline komentármi a čítajte review späť."
url: https://roundly-consulting.com/sk/open-source/navody/git-for-laravel/pull-requesty
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Git for Laravel](https://roundly-consulting.com/sk/open-source/navody/git-for-laravel.md)

# Merge a review pull requestov

Zatvorenie, schválenie a merge pull requestu:

```php
use RoundlyConsulting\Git\Enums\MergeMethod;

$pr = Git::github()->repo('acme/acme')->pullRequest($number);

$pr->close();           // PullRequest, state closed — never merges
$pr->approve('LGTM');   // the review's own state, e.g. "APPROVED"
$sha = $pr->merge(
    MergeMethod::Squash, // Merge | Squash | Rebase — a repository may disallow any of them
    sha: $headSha,       // the head commit you decided about
    title: 'Add CI (#7)',
    message: 'Squashed by the release bot.',
);
```

- Merge, ktorý platforma odmietne, vyhodí výnimku. 405 (ochrana vetvy, povinná kontrola, nepovolená metóda mergu) a 409 (konflikt alebo nesediace sha) prídu ako RequestException — úspešný návrat vždy znamená, že merge prebehol, takže neexistuje merged: false na kontrolu.
- Odovzdajte sha — head commit, o ktorom ste rozhodli. Bez neho sa push, ktorý príde medzi review a mergom, zmerguje bez povšimnutia; s ním skončí odpoveďou 409.
- close() vždy len zatvára — nikdy nemerguje a nikdy znovu neotvára.
- GitHub nedovolí účtu schváliť vlastný pull request. Pre aplikáciu je každý pull request, ktorý otvorila, jej vlastný, takže služba, ktorá pull requesty vytvára, ich nemôže aj schvaľovať.

## Publikovanie review

Celé review jedným volaním — verdikt, zhrnutie a inline komentáre ukotvené v diffe:

```php
use RoundlyConsulting\Git\Dto\Input\{NewReview, NewReviewComment};
use RoundlyConsulting\Git\Enums\{DiffSide, ReviewEvent};

$pr = Git::github()->repo('acme/acme')->pullRequest($number);

$review = $pr->review(new NewReview(
    event: ReviewEvent::Comment,                    // Comment | Approve | RequestChanges
    body: 'Two findings, one blocking.',
    comments: [
        new NewReviewComment('app/Foo.php', 42, 'This nulls out on the retry.'),
        new NewReviewComment('app/Bar.php', 7, 'Deleted line, so anchor it left.', DiffSide::Left),
        // A finding about a block: lines 30–36, inclusive.
        new NewReviewComment('app/Baz.php', 36, 'This whole branch is unreachable.', startLine: 30),
    ],
));
```

- Jedna požiadavka, nie jedna na každý komentár. GitHub publikuje review atomicky, takže pri chybe na pull requeste nikdy nezostane polovičné review.
- Approve a RequestChanges sú na vlastnom pull requeste odmietnuté (422), presne ako approve(). Účet, ktorý pull requesty vytvára, môže na vlastnú prácu dať len Comment — verdikt, podľa ktorého má čitateľ konať, preto patrí do textu review.
- Komentár ukotvený mimo diffu je tiež 422 — riadok sa nezmenil. Odstránené riadky ukotvite cez DiffSide::Left; predvolená je strana Right.
- startLine musí byť pred line; obrátený alebo nulový rozsah sa odmietne lokálne cez InvalidArgumentException.

## Čítanie review

```php
$reviews = $pr->reviews();

$reviews->reviews;                    // list<PullRequestReview>        — state, body, author, submittedAt
$reviews->comments;                   // list<PullRequestReviewComment> — body, path, line, side, reviewId
$reviews->isEmpty();                  // nobody has reviewed it at all

$latest = $reviews->latest();         // the newest SUBMITTED review, or null
$latest?->state;                      // 'APPROVED' | 'CHANGES_REQUESTED' | 'COMMENTED' | 'DISMISSED' | …
$reviews->commentsFor($latest);       // just the findings that review published

foreach ($reviews->comments as $comment) {
    if ($comment->isOutdated()) {     // line is null — the anchor was dropped
        continue;
    }
}
```

- Použite latest(), nie end($reviews->reviews). GitHub vracia review od najstaršieho, no rozpracovaný koncept nemá submittedAt a aj tak je zoradený posledný — naivné čítanie by vrátilo verdikt, ktorý nikto nepublikoval.
- Oba endpointy sa prechádzajú až do konca (maxPages, predvolene 5; perPage 100), pretože jedna stránka dlhého vlákna obsahuje jeho najstaršie review.
- submittedAt je null pri rozpracovanom koncepte, line je null pri zastaranom komentári, ktorému GitHub odobral ukotvenie, a createdAt je null namiesto aktuálneho času, ak payload časovú značku nemá.

GitLab a Bitbucket pri zatváraní, schvaľovaní, review aj merge vyhodia FeatureNotSupportedException — ak pracujete s viacerými platformami, overte supports(Feature::MergePullRequest).

## Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

[Ďalšie spôsoby podpory vrátane kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/git-for-laravel.md)
