<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Laravel Git Blog - Reviews</title><description>Blog posts tagged Reviews: notes on Git, code review and shipping Laravel projects.</description><link>https://laravelgit.com/</link><language>en-gb</language><atom:link href="https://laravelgit.com/blog/tag/reviews.xml" rel="self" type="application/rss+xml"/><item><title>Branch Protection Rules That Stick</title><link>https://laravelgit.com/blog/branch-protection-rules-that-stick/</link><guid isPermaLink="true">https://laravelgit.com/blog/branch-protection-rules-that-stick/</guid><description>Three rules cover most of the risk on main: review required, tests green, no force-push. More than that tends to get routed around.</description><pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Branch protection fails in two ways: too little of it, and so much of it that the team routes around it. For a small team, three rules do most of the work.&lt;/p&gt;
&lt;h2&gt;1. Require a pull request and one review&lt;/h2&gt;
&lt;p&gt;Nobody pushes straight to main, including the senior who &amp;quot;just fixes a typo&amp;quot;. One reviewer is enough at this size — the point is a second pair of eyes, not a committee.&lt;/p&gt;
&lt;h2&gt;2. Require checks to pass&lt;/h2&gt;
&lt;p&gt;The test suite runs on the PR and must be green before merge. This is what keeps &amp;quot;main always runs&amp;quot; true in practice rather than in principle. If the suite is slow, fix the suite — do not downgrade the rule to &amp;quot;tests optional&amp;quot;.&lt;/p&gt;
&lt;h2&gt;3. No force-pushes to main&lt;/h2&gt;
&lt;p&gt;Shared history is append-only. Rewriting main breaks everyone&amp;#39;s clones and makes the audit trail meaningless. Rebasing stays on feature branches, where it belongs.&lt;/p&gt;
&lt;h2&gt;What to leave out until it hurts&lt;/h2&gt;
&lt;p&gt;Code-owner reviews, signed-commit requirements, linear-history-only, status checks from five tools — each adds friction that makes sense at a specific size or risk level. Add them when a real incident names the need, not because the settings page offers them.&lt;/p&gt;
&lt;p&gt;The test of a ruleset is whether the team still respects it in month six. Small and enforced beats thorough and bypassed.&lt;/p&gt;
</content:encoded><category>Workflows</category><category>Reviews</category></item><item><title>Merging vs Rebasing on a Small Team</title><link>https://laravelgit.com/blog/merging-vs-rebasing-for-small-teams/</link><guid isPermaLink="true">https://laravelgit.com/blog/merging-vs-rebasing-for-small-teams/</guid><description>Rebase to tidy your own branch, merge to combine into main. One sentence of policy saves a lot of history arguments.</description><pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Few git arguments cost more than they settle. The working rule for a small team fits in one sentence: rebase your own branch, merge into main.&lt;/p&gt;
&lt;h2&gt;Rebase is for your branch&lt;/h2&gt;
&lt;p&gt;While your branch is still yours, keep it current and readable:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git fetch origin
git rebase origin/main
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Your commits replay on top of main, conflicts show up in small pieces while you still remember the change, and the branch reads like a story a reviewer can follow.&lt;/p&gt;
&lt;h2&gt;Merge is for main&lt;/h2&gt;
&lt;p&gt;When the branch is done, merge it. The merge commit marks where the work landed and keeps the group&amp;#39;s shared history untouched:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git checkout main
git merge --no-ff pr-42-branch
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;--no-ff&lt;/code&gt; keeps the feature visible as one unit, which makes the changelog draft and any later revert much easier.&lt;/p&gt;
&lt;h2&gt;What not to do&lt;/h2&gt;
&lt;p&gt;Never rebase a branch someone else has pulled. Rewriting shared history is how teammates lose work and trust the repo a little less. If it is pushed and shared, it merges.&lt;/p&gt;
&lt;p&gt;That is the whole policy. Write it in the README and spend the argument on the code instead.&lt;/p&gt;
</content:encoded><category>Workflows</category><category>Reviews</category></item><item><title>Migrations in Code Review: What to Look For</title><link>https://laravelgit.com/blog/migrations-in-code-review/</link><guid isPermaLink="true">https://laravelgit.com/blog/migrations-in-code-review/</guid><description>A merged migration is a fact you cannot edit. The review checklist: reversible down(), safe defaults, indexes, and no data surgery in schema changes.</description><pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Most code review feedback is a request for changes, and the author edits the same file. Migrations break that rule: once a migration is merged and run anywhere - staging, a teammate&amp;#39;s machine, production - the file is a fact. Editing it changes nothing that already ran and silently forks the databases that have not. Reviewing migrations well matters more than reviewing almost any other diff, because it is the last time the change is cheap.&lt;/p&gt;
&lt;h2&gt;The review checklist&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Does &lt;code&gt;down()&lt;/code&gt; actually reverse the &lt;code&gt;up()&lt;/code&gt;?&lt;/strong&gt; A &lt;code&gt;down()&lt;/code&gt; that drops the table when &lt;code&gt;up()&lt;/code&gt; added a column is a trap for the next rollback. If the change is genuinely irreversible - a dropped column - that should be a shouted comment, not a silent absence.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Are defaults and nullability safe for existing rows?&lt;/strong&gt; Adding a &lt;code&gt;NOT NULL&lt;/code&gt; column without a default to a table with a million rows either fails or rewrites the table while holding a lock. The safe shape is nullable first, backfill, constrain later - the same three-step dance as &lt;a href=&quot;/blog/zero-downtime-deploys-for-laravel/&quot;&gt;zero-downtime deploys&lt;/a&gt; require.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Did new query paths get indexes?&lt;/strong&gt; A column added for a lookup (&lt;code&gt;WHERE stripe_customer_id = ...&lt;/code&gt;) without an index is a slow query waiting for traffic. The migration is the cheapest place the index will ever be added.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Is data surgery mixed into schema changes?&lt;/strong&gt; A migration that both alters a table and rewrites its rows couples &amp;quot;change the shape&amp;quot; with &amp;quot;change the content&amp;quot; in one irreversible step. Schema in migrations, data in a one-off artisan command you can rerun and monitor.&lt;/p&gt;
&lt;h2&gt;After merge: hands off&lt;/h2&gt;
&lt;p&gt;The corollary rule, worth stating in the team&amp;#39;s &lt;a href=&quot;/blog/onboarding-a-developer-to-your-git-workflow/&quot;&gt;written workflow&lt;/a&gt;: a merged migration is never edited. Found a typo in a column name after merge? A new migration renames it. This feels heavy the first time and is obviously correct the first time someone hits a database that ran the original.&lt;/p&gt;
&lt;p&gt;Review migrations slowly, then let them harden into facts. That asymmetry - expensive to change, cheap to get right beforehand - is exactly what the habits in &lt;a href=&quot;/blog/code-review-habits/&quot;&gt;Code Review Habits That Actually Catch Bugs&lt;/a&gt; are for.&lt;/p&gt;
</content:encoded><category>Reviews</category></item><item><title>How to Review a Large Pull Request Without Losing a Day</title><link>https://laravelgit.com/blog/reviewing-a-large-pull-request/</link><guid isPermaLink="true">https://laravelgit.com/blog/reviewing-a-large-pull-request/</guid><description>Sometimes the big PR lands in your queue anyway. A reading order that surfaces the risk first, and how to give useful feedback instead of a rubber stamp or a rewrite request.</description><pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The right answer to &amp;quot;how do I review a 2,000-line pull request&amp;quot; is usually &amp;quot;ask for three smaller ones&amp;quot; - and &lt;a href=&quot;/blog/small-pull-requests-get-reviewed-faster/&quot;&gt;small pull requests get reviewed faster&lt;/a&gt; makes that case. But sometimes the split is not happening: it is a generated migration plus its fallout, a vendored update, a refactor that only makes sense whole. Here is how to review it honestly anyway.&lt;/p&gt;
&lt;h2&gt;Read in this order&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1. The description and the tests, before any source.&lt;/strong&gt; The description tells you what the author thinks they did; the tests tell you what the code claims to guarantee. If either is missing, that is your first comment - reviewing code whose intent you are guessing is how subtle bugs get waved through.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. The risky files, not the first files.&lt;/strong&gt; Sort mentally by blast radius: migrations (see &lt;a href=&quot;/blog/migrations-in-code-review/&quot;&gt;reviewing migrations&lt;/a&gt;), anything touching auth, money or deletion, config and deploy changes. These get your freshest attention and line-by-line reading. Controllers and views get pattern-level reading. Generated files, snapshots and lockfiles get a skim - nobody reviews &lt;code&gt;composer.lock&lt;/code&gt; line by line, they verify it was regenerated (the &lt;a href=&quot;/blog/lockfiles-in-git-commit-them-and-survive-the-conflicts/&quot;&gt;lockfiles guide&lt;/a&gt; has the drill).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Commit by commit, if the commits are clean.&lt;/strong&gt; A well-sequenced history is the author&amp;#39;s own explanation of the change - this is what &lt;a href=&quot;/blog/tidying-commits-before-review/&quot;&gt;tidying commits before review&lt;/a&gt; is for. If the commits are &amp;quot;wip&amp;quot;, &amp;quot;fix&amp;quot;, &amp;quot;fix fix&amp;quot;, abandon this step and read the full diff.&lt;/p&gt;
&lt;h2&gt;Give feedback that fits the size&lt;/h2&gt;
&lt;p&gt;The failure mode of big reviews is binary: a defeated &amp;quot;LGTM&amp;quot; or a comment list so long it reads as hostility. The useful middle is sorting your comments:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Blocking:&lt;/strong&gt; correctness, security, data loss. Few of these, clearly marked.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Worth discussing:&lt;/strong&gt; design questions where you could be wrong.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not blocking:&lt;/strong&gt; style and preference - say once, in one comment, not forty.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And say what you did: &amp;quot;read migrations and billing code line by line, skimmed the rest&amp;quot; is honest and lets the author ask a second reviewer for the parts you skimmed. Two honest partial reviews beat one pretend complete one.&lt;/p&gt;
&lt;p&gt;The last word stays with prevention: the best large-PR review is the one that never has to happen because the next one got split.&lt;/p&gt;
</content:encoded><category>Reviews</category></item><item><title>Review Your Own Pull Request Before Anyone Else Does</title><link>https://laravelgit.com/blog/reviewing-your-own-pull-request-first/</link><guid isPermaLink="true">https://laravelgit.com/blog/reviewing-your-own-pull-request-first/</guid><description>The cheapest review round is the one you do yourself. Read the diff as a stranger, hunt the usual suspects, and annotate the non-obvious parts.</description><pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;By the time you open a pull request, you have read your own code a dozen times - as its author. That is exactly the problem. You see what you meant, not what you wrote. A self-review pass, done in the diff view rather than your editor, catches the gap between the two while it is still free to fix.&lt;/p&gt;
&lt;h2&gt;Read the diff, not the code&lt;/h2&gt;
&lt;p&gt;Your editor shows the final state with all the context in your head. The diff shows only what changed, which is what your reviewer gets. Open the &amp;quot;files changed&amp;quot; view - or run it locally:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git diff main...HEAD
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Read it top to bottom as if a colleague sent it. The first things that jump out are usually embarrassing in a useful way: a leftover &lt;code&gt;dump()&lt;/code&gt; in a Laravel controller, a commented-out block, a migration that adds a column the model no longer uses.&lt;/p&gt;
&lt;h2&gt;The usual suspects&lt;/h2&gt;
&lt;p&gt;A short checklist beats good intentions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Debug leftovers: &lt;code&gt;dump()&lt;/code&gt;, &lt;code&gt;dd()&lt;/code&gt;, &lt;code&gt;console.log&lt;/code&gt;, stray log channels.&lt;/li&gt;
&lt;li&gt;Dead code: commented blocks, unused imports, variables set and never read.&lt;/li&gt;
&lt;li&gt;Names that made sense mid-thought: &lt;code&gt;$data2&lt;/code&gt;, &lt;code&gt;$temp&lt;/code&gt;, &lt;code&gt;$result&lt;/code&gt; where the domain has a real word.&lt;/li&gt;
&lt;li&gt;Tests that prove the happy path only - the &lt;a href=&quot;/blog/code-review-habits/&quot;&gt;code review habits&lt;/a&gt; post has the reviewer-side version of this list.&lt;/li&gt;
&lt;li&gt;Anything you cannot explain in one sentence. If you struggle, the reviewer will too.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Annotate the non-obvious parts&lt;/h2&gt;
&lt;p&gt;Some lines are strange on purpose: a workaround for a queue driver quirk, an index added for one specific report. Leave a comment on your own PR explaining them before anyone asks. It saves a review round, and it pairs naturally with a good &lt;a href=&quot;/blog/writing-a-good-pull-request-description/&quot;&gt;pull request description&lt;/a&gt; - the description says what and why, the inline comments say &amp;quot;yes, this odd line is deliberate.&amp;quot;&lt;/p&gt;
&lt;p&gt;Self-review also keeps the whole pipeline honest: PRs stay &lt;a href=&quot;/blog/small-pull-requests-get-reviewed-faster/&quot;&gt;small and reviewable&lt;/a&gt;, commits stay &lt;a href=&quot;/blog/tidying-commits-before-review/&quot;&gt;tidy&lt;/a&gt;, and your reviewer&amp;#39;s attention goes to the decisions that actually need a second brain instead of the typos that needed a second pair of eyes - yours, an hour later.&lt;/p&gt;
</content:encoded><category>Reviews</category></item><item><title>Small Pull Requests Get Reviewed Faster</title><link>https://laravelgit.com/blog/small-pull-requests-get-reviewed-faster/</link><guid isPermaLink="true">https://laravelgit.com/blog/small-pull-requests-get-reviewed-faster/</guid><description>Review time grows faster than diff size. Splitting work into small, single-idea pull requests gets you same-day reviews and better feedback.</description><pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A 1,500-line pull request does not take ten times longer to review than a 150-line one. It takes longer than that, because nobody starts it. Reviewers see the line count, decide they need a free afternoon they do not have, and the PR sits. Small PRs break that cycle.&lt;/p&gt;
&lt;h2&gt;Why big PRs stall&lt;/h2&gt;
&lt;p&gt;Three things happen with a large diff:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reviewers postpone it, so feedback arrives days late, after you have mentally moved on.&lt;/li&gt;
&lt;li&gt;When the review finally happens, it is shallow - nobody can hold 40 files in their head, so real bugs hide in the middle of the diff.&lt;/li&gt;
&lt;li&gt;Merges get riskier, because a PR that touches everything conflicts with everything.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A PR under a few hundred lines gets read the day it opens, and it gets read properly.&lt;/p&gt;
&lt;h2&gt;Splitting a Laravel feature&lt;/h2&gt;
&lt;p&gt;Take a typical feature: a migration, a model, a controller, routes, a form request, views, tests. That feels atomic, but it usually splits cleanly:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Migration and model first - the schema is reviewable on its own.&lt;/li&gt;
&lt;li&gt;The read path next - list and show endpoints with their tests.&lt;/li&gt;
&lt;li&gt;The write path last - create, update, delete, and validation.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Each PR is deployable, each review is quick, and if the write path turns out to be the wrong design, you have not merged it yet. If later PRs depend on earlier ones, use stacked branches: branch the second PR off the first, and retarget it to main once the first merges.&lt;/p&gt;
&lt;h2&gt;Keeping PRs small day to day&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;One idea per PR. If the description needs an &amp;quot;and also&amp;quot;, it is two PRs.&lt;/li&gt;
&lt;li&gt;Split mechanical changes (a rename across 30 files, a Pint run) from behavioral ones, so the behavioral diff stays readable.&lt;/li&gt;
&lt;li&gt;Tidy commits before opening the PR so the reviewer reads your intent, not your process - see &lt;a href=&quot;/blog/tidying-commits-before-review/&quot;&gt;Tidying Commits Before You Open a Pull Request&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Write a description that says what to look at first - &lt;a href=&quot;/blog/writing-a-good-pull-request-description/&quot;&gt;Writing a Good Pull Request Description&lt;/a&gt; covers that.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The habit compounds: reviewers who trust your PRs to be small stop dreading them, and the whole team&amp;#39;s queue moves. Pair it with the review-side habits in &lt;a href=&quot;/blog/code-review-habits/&quot;&gt;Code Review Habits That Actually Catch Bugs&lt;/a&gt; and the review round trip gets short enough to feel like pair programming at a distance.&lt;/p&gt;
</content:encoded><category>Reviews</category></item><item><title>Trunk-Based Development on a Small Laravel Team</title><link>https://laravelgit.com/blog/trunk-based-development-for-small-laravel-teams/</link><guid isPermaLink="true">https://laravelgit.com/blog/trunk-based-development-for-small-laravel-teams/</guid><description>Short-lived branches into main beat long feature branches: smaller merges, a main that always runs, and deploys that stay boring.</description><pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Long-lived feature branches feel safe and bill you later: the two-week branch that takes a day to merge, and the merge nobody wants to re-run. Trunk-based development is the alternative that works well for small teams.&lt;/p&gt;
&lt;h2&gt;The rules, sized for a small team&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Everything targets &lt;code&gt;main&lt;/code&gt;. Branches live hours to a couple of days, never weeks.&lt;/li&gt;
&lt;li&gt;Main always runs: tests pass, migrations apply, the app boots.&lt;/li&gt;
&lt;li&gt;Review is quick and small, because the changes are small.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Half-done work still merges&lt;/h2&gt;
&lt;p&gt;The objection is always &amp;quot;the feature is not finished&amp;quot;. Merge it anyway, behind a flag. In Laravel that is a config entry or a &lt;code&gt;Feature::active()&lt;/code&gt; check, not a branch:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;if (config(&amp;#39;features.new_billing&amp;#39;)) {
    // new flow
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Delete the flag when the feature ships. A flag you forget is cheaper than a branch you rebase for a month.&lt;/p&gt;
&lt;h2&gt;What it buys&lt;/h2&gt;
&lt;p&gt;Conflicts stay small because diffs stay small. Main is deployable any day, so the git-push deploy from a tag or from main stops being an event. And code review gets read, because there is finally little enough of it.&lt;/p&gt;
&lt;p&gt;Start with the rule that matters most: nothing lives on a branch longer than two days.&lt;/p&gt;
</content:encoded><category>Workflows</category><category>Reviews</category></item><item><title>Writing a Pull Request Description People Actually Read</title><link>https://laravelgit.com/blog/writing-a-good-pull-request-description/</link><guid isPermaLink="true">https://laravelgit.com/blog/writing-a-good-pull-request-description/</guid><description>What, why, and how to see it working. Three short sections beat a wall of text and speed up every review.</description><pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Reviewers decide how carefully to read from the description. A blank one says &amp;quot;good luck&amp;quot;; a wall of text says the same thing louder. Three short sections cover almost every PR.&lt;/p&gt;
&lt;h2&gt;What changed&lt;/h2&gt;
&lt;p&gt;One or two sentences, no file list — the diff already shows files. &amp;quot;Adds a queued job that re-sends failed webhook deliveries with backoff&amp;quot; is enough.&lt;/p&gt;
&lt;h2&gt;Why&lt;/h2&gt;
&lt;p&gt;The part that saves the reviewer a Slack message. Link the ticket if there is one, otherwise say what was broken or missing. &amp;quot;Deliveries failed silently when the endpoint returned 5xx, and clients had no way to replay them&amp;quot; is a reason; &amp;quot;requested changes&amp;quot; is not.&lt;/p&gt;
&lt;h2&gt;How to see it working&lt;/h2&gt;
&lt;p&gt;The step everyone skips and the one reviewers want most: the command to run, the page to open, the seed data to create. On a Laravel app that is usually a route to hit, an artisan command, or a test to run:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;php artisan test --filter=WebhookRetryTest
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Keep it short on purpose&lt;/h2&gt;
&lt;p&gt;If the description needs paragraphs, the PR probably needs splitting. Small PRs with three honest sections get read, get real comments, and merge while the context is still warm.&lt;/p&gt;
</content:encoded><category>Reviews</category></item><item><title>Reviewing Pull Requests With Git Worktrees</title><link>https://laravelgit.com/blog/git-worktrees-for-laravel-reviews/</link><guid isPermaLink="true">https://laravelgit.com/blog/git-worktrees-for-laravel-reviews/</guid><description>Run the PR next to your working copy instead of stashing and switching: git worktree, a second .env, and a throwaway database.</description><pubDate>Tue, 20 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Reviewing a pull request properly means running it, not just reading the diff. Switching your working copy back and forth costs your uncommitted state every time. Worktrees sidestep that.&lt;/p&gt;
&lt;h2&gt;Check out the PR next to your work&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git fetch origin
git worktree add ../myapp-pr-42 pr-42-branch
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You get a second directory on the PR branch while your main checkout stays exactly as it was.&lt;/p&gt;
&lt;h2&gt;Give it its own environment&lt;/h2&gt;
&lt;p&gt;A Laravel app needs more than the code:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd ../myapp-pr-42
composer install
cp ../myapp/.env .env
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then change what must not clash: &lt;code&gt;APP_URL&lt;/code&gt; and port if you serve both at once, and &lt;code&gt;DB_DATABASE&lt;/code&gt; to a throwaway database so the PR&amp;#39;s migrations do not touch your dev data:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;php artisan migrate --seed
php artisan serve --port=8001
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Tear it down cleanly&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git worktree remove ../myapp-pr-42
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The branch stays until you delete it; the directory and database go.&lt;/p&gt;
&lt;h2&gt;When it pays&lt;/h2&gt;
&lt;p&gt;One PR a month is fine to stash and switch. A team merging daily needs the review to be cheap, and cheap means the PR runs in its own directory while your own work never moves.&lt;/p&gt;
</content:encoded><category>Reviews</category><category>Tooling</category></item><item><title>Code Review Habits That Keep Main Clean</title><link>https://laravelgit.com/blog/code-review-habits/</link><guid isPermaLink="true">https://laravelgit.com/blog/code-review-habits/</guid><description>Small changes, clear descriptions and fast feedback.</description><pubDate>Thu, 15 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Review works best when it is cheap.&lt;/p&gt;
&lt;h2&gt;Keep changes small&lt;/h2&gt;
&lt;p&gt;Small changes get read. Large ones get skimmed.&lt;/p&gt;
&lt;h2&gt;Say what and why&lt;/h2&gt;
&lt;p&gt;A short description of the change and the reason saves the reviewer a guess.&lt;/p&gt;
&lt;h2&gt;Review quickly&lt;/h2&gt;
&lt;p&gt;A review that waits a week blocks the next change too.&lt;/p&gt;
</content:encoded><category>Reviews</category><category>Workflows</category></item></channel></rss>