<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>GitHub on ShawnDeng's Tech Blog</title><link>https://shawndeng.tech/tags/github/</link><description>Recent content in GitHub on ShawnDeng's Tech Blog</description><generator>Hugo -- 0.146.0</generator><language>zh-cn</language><lastBuildDate>Sat, 01 Aug 2026 18:04:00 +0800</lastBuildDate><atom:link href="https://shawndeng.tech/tags/github/index.xml" rel="self" type="application/rss+xml"/><item><title>Git PR 使用 Squash and Merge 前，什么时候应该 Rebase？</title><link>https://shawndeng.tech/posts/git-rebase-before-squash-merge/</link><pubDate>Sat, 01 Aug 2026 18:04:00 +0800</pubDate><guid>https://shawndeng.tech/posts/git-rebase-before-squash-merge/</guid><description>&lt;h2 id="先说结论">先说结论&lt;/h2>
&lt;p>在 GitHub 中使用 &lt;strong>Squash and Merge&lt;/strong> 合并 PR，并不意味着每个 PR 都必须先执行 &lt;code>rebase&lt;/code>。&lt;/p>
&lt;p>两者解决的问题不同：&lt;/p>
&lt;ul>
&lt;li>&lt;code>rebase&lt;/code>：把当前分支重新接到目标分支最新提交之后，必要时顺便整理提交顺序。&lt;/li>
&lt;li>&lt;code>Squash and Merge&lt;/code>：合并 PR 时，把 PR 中的多个提交压缩成目标分支上的一个提交。&lt;/li>
&lt;/ul>
&lt;p>所以，是否需要 rebase，主要看分支是否落后、是否出现冲突、是否需要在合并前验证最新代码，而不是看 PR 里有多少个 commit。&lt;/p>
&lt;h2 id="一个常见的误区">一个常见的误区&lt;/h2>
&lt;p>很多人看到 PR 里有这样的提交记录：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>feat: add login page
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>fix: adjust login style
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>fix: handle empty password
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>WIP
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>于是认为合并前必须执行：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>git rebase -i HEAD~4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其实，如果仓库最终使用 &lt;strong>Squash and Merge&lt;/strong>，GitHub 会在合并时把这些提交压成一个提交。上面的提交历史虽然不够整齐，但通常不会污染 &lt;code>develop&lt;/code> 或 &lt;code>main&lt;/code> 分支。&lt;/p>
&lt;p>为了整理提交信息而 rebase，属于可选操作；为了让 PR 基于最新目标分支并通过测试，才是更常见、更有实际价值的 rebase 场景。&lt;/p>
&lt;h2 id="什么时候应该在合并前-rebase">什么时候应该在合并前 Rebase？&lt;/h2>
&lt;h3 id="1-目标分支已经有较多新提交">1. 目标分支已经有较多新提交&lt;/h3>
&lt;p>假设你的 PR 是从 &lt;code>develop&lt;/code> 创建的：&lt;/p></description></item></channel></rss>