<?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>Git Merge on 楠楠自瑜</title>
    <link>https://cnutshell.net/tags/git-merge/</link>
    <description>Recent content in Git Merge on 楠楠自瑜</description>
    <generator>Hugo -- 0.157.0</generator>
    <language>zh-cn</language>
    <lastBuildDate>Tue, 16 Jun 2026 10:35:30 +0800</lastBuildDate>
    <atom:link href="https://cnutshell.net/tags/git-merge/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>git 分支合并：什么时候用 merge，什么时候用 rebase</title>
      <link>https://cnutshell.net/tools/git-merge-rebase/</link>
      <pubDate>Tue, 16 Jun 2026 10:35:30 +0800</pubDate>
      <guid>https://cnutshell.net/tools/git-merge-rebase/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Gemini Generated Image g2dh9mg2dh9mg2dh&#34; loading=&#34;lazy&#34; src=&#34;https://cdn.jsdelivr.net/gh/cuiguoke/blogger-assets/images/20260616103536931.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;AI 编程工具让代码生成、重构和修复变得越来越快，但它也放大了另一个问题：改动来得越快，越需要清晰的版本历史来解释这些改动从哪里来、为什么发生、何时进入稳定版本。&lt;/p&gt;
&lt;p&gt;作为版本管理工具，Git 在 AI 编程时代扮演着越来越重要的角色，它可以为工程协作提供的时间线、审计记录和回滚机制。越是在 AI 能快速生成大量代码的场景下，越需要理解标准工作流，避免把临时实验、半成品功能和稳定发布混在一起。&lt;/p&gt;
&lt;p&gt;Git 命令本身往往不是难点，难点在于搞清何时用它们。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git merge [--no-ff|--squash]&lt;/code&gt;、&lt;code&gt;git rebase&lt;/code&gt; 都能把改动带到另一个分支，但它们对提交历史的处理完全不同。什么时候应该用 &lt;code&gt;merge&lt;/code&gt;，什么时候应该用 &lt;code&gt;rebase&lt;/code&gt;？这就是本文要回答的问题。下面以一个虚构项目 &lt;code&gt;world-cup-dashboard&lt;/code&gt; 为例，说明这两个命令的用法，最后推荐一种围绕 git 工具的项目开发流程。&lt;/p&gt;
&lt;h2 id=&#34;1-分支约定&#34;&gt;1. 分支约定&lt;/h2&gt;
&lt;p&gt;通常，一个项目会有三类分支：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;main       稳定发布分支
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dev        日常集成分支
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;feature/*  单个功能分支
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;下面的命令，会初始化项目，并建立 &lt;code&gt;dev&lt;/code&gt; 分支：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git init
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git add .
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git commit -m &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Initial project&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git switch -c dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;项目开发流程：&lt;code&gt;main&lt;/code&gt; 保持稳定，日常改动先进 &lt;code&gt;dev&lt;/code&gt;，较大的任务从 &lt;code&gt;dev&lt;/code&gt; 拉 &lt;code&gt;feature/*&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&#34;2-在-feature-分支开发功能&#34;&gt;2. 在 feature 分支开发功能&lt;/h2&gt;
&lt;p&gt;假设要做赛程页面，从 &lt;code&gt;dev&lt;/code&gt; 分支上新建一个 &lt;code&gt;feature/schedule-page&lt;/code&gt; 分支：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git switch dev
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git switch -c feature/schedule-page
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;开发过程中可能产生几个有意义的提交：&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
