<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>從零開始學 Git on 跟著 Desolve 學程式</title><link>https://learnwithdesolve.netlify.app/series/%E5%BE%9E%E9%9B%B6%E9%96%8B%E5%A7%8B%E5%AD%B8-git/</link><description>Recent content in 從零開始學 Git on 跟著 Desolve 學程式</description><generator>Hugo -- gohugo.io</generator><language>zh-tw</language><lastBuildDate>Thu, 07 May 2026 14:00:00 +0800</lastBuildDate><atom:link href="https://learnwithdesolve.netlify.app/series/%E5%BE%9E%E9%9B%B6%E9%96%8B%E5%A7%8B%E5%AD%B8-git/index.xml" rel="self" type="application/rss+xml"/><item><title>從零開始學 Git — 從時光機到平行時空，再到專業補丁大作戰！</title><link>https://learnwithdesolve.netlify.app/post/git-github/</link><pubDate>Thu, 07 May 2026 14:00:00 +0800</pubDate><guid>https://learnwithdesolve.netlify.app/post/git-github/</guid><description>&lt;img src="https://learnwithdesolve.netlify.app/img/git.webp" alt="Featured image of post 從零開始學 Git — 從時光機到平行時空，再到專業補丁大作戰！" />&lt;h2 id="前言你還在用最終版_真的最後一版_絕對不改版zip嗎">前言：你還在用「最終版_真的最後一版_絕對不改版.zip」嗎？
&lt;/h2>&lt;p>相信各位在剛開始寫程式的時候，一定遇過這種悲劇：&lt;br>
剛寫好一個功能，結果手賤改了一下，程式就再也跑不起來了，而且你完全不記得剛才動了哪一行。&lt;br>
或者是跟同學協作專案，大家用隨身碟傳檔案，結果你的程式碼被別人的舊版本覆蓋掉，瞬間心血化為烏有。&lt;/p>
&lt;p>如果你有以上症狀，那麼你需要的不是祈禱，而是 &lt;strong>Git&lt;/strong>。&lt;br>
Git 就像是開發者的「存檔點（Save Point）」與「時光機」。它能記錄你程式碼的每一刻，讓你在出事時能隨時跳回那個「至少還跑得動」的時空。&lt;/p>
&lt;p>今天我們就來聊聊 Git，從基礎的概念到專業開發者必備的進階技巧，一次幫你補齊！&lt;/p>
&lt;hr>
&lt;h2 id="1-git-的三層世界觀拍照存檔的藝術">1. Git 的三層世界觀：拍照存檔的藝術
&lt;/h2>&lt;p>在 Git 的世界裡，要把你的修改「存檔」，其實要經過三個階段。我們可以把它想像成拍婚紗照的過程：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Working Directory (工作目錄)&lt;/strong>：你正在寫 Code 的地方，就像是在更衣室換衣服。&lt;/li>
&lt;li>&lt;strong>Staging Area (暫存區)&lt;/strong>：你覺得這段 Code 寫得差不多了，把它加進來，就像是穿好禮服、化好妝，站在攝影機前面擺好姿勢。&lt;/li>
&lt;li>&lt;strong>Repository (本地倉庫)&lt;/strong>：按下快門，這張照片正式被記錄在相簿裡。&lt;/li>
&lt;/ol>
&lt;h3 id="常用指令實作">常用指令實作
&lt;/h3>&lt;div class="highlight">&lt;div style="color:#cad3f5;background-color:#24273a;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#cad3f5;background-color:#24273a;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2"> 1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2"> 2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2"> 3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2"> 4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2"> 5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2"> 6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2"> 7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2"> 8
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2"> 9
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">10
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#cad3f5;background-color:#24273a;-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>&lt;span style="color:#6e738d;font-style:italic"># 1. 建立時光機入口：在資料夾內初始化 Git&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git init
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6e738d;font-style:italic"># 2. 查看當前時空狀態：看看有哪些檔案還沒「擺好姿勢」&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git status
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6e738d;font-style:italic"># 3. 將修改放入暫存區：準備好拍照&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git add &amp;lt;檔案名稱或 . 代表全部&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6e738d;font-style:italic"># 4. 正式記錄時光：按下快門存檔&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git commit -m &lt;span style="color:#a6da95">&amp;#34;feat: 這裡寫下你這次做了什麼改動&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="2-分支branch開啟平行時空的冒險">2. 分支（Branch）：開啟平行時空的冒險
&lt;/h2>&lt;p>當你想要開發一個可能會「毀滅世界」的新功能，但又不希望影響到現在正跑得很順的版本時，&lt;strong>分支&lt;/strong>就是你的平行宇宙。&lt;/p>
&lt;p>你可以在 &lt;code>dev&lt;/code> 分支裡瘋狂實驗，如果不小心把程式寫爛了，直接把這個平行宇宙毀掉（刪除分支）就好，主線（&lt;code>main/master&lt;/code>）依然毫髮無傷。如果實驗成功，再把它「合併（Merge）」回現實世界。&lt;/p>
&lt;div class="highlight">&lt;div style="color:#cad3f5;background-color:#24273a;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#cad3f5;background-color:#24273a;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">8
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#cad3f5;background-color:#24273a;-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>&lt;span style="color:#6e738d;font-style:italic"># 開啟平行時空&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git branch dev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6e738d;font-style:italic"># 跳躍到平行時空&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git checkout dev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6e738d;font-style:italic"># (在 dev 寫完後) 回到現實世界，並合併成果&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git checkout main
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git merge dev
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="3-給後悔藥一個機會git-revert--安全的撤銷">3. 給後悔藥一個機會：&lt;code>git revert&lt;/code> — 安全的撤銷
&lt;/h2>&lt;p>人非聖賢，孰能無過？有時候 Commit 了才發現裡面有一行 Code 會讓伺服器爆炸。&lt;br>
這時候很多人會想到 &lt;code>git reset&lt;/code>，但如果你已經把 Code 推送到 GitHub 上，&lt;strong>千萬不要隨便用 reset&lt;/strong>，因為那會改寫歷史，讓你的隊友崩潰。&lt;/p>
&lt;p>這時候 &lt;strong>&lt;code>git revert&lt;/code>&lt;/strong> 就是你的好朋友。它不會刪除舊的歷史，而是&lt;strong>新增一個「反向」的 Commit&lt;/strong> 來抵消掉錯誤。就像是你在帳本上記錯一筆帳，你不是用橡皮擦擦掉，而是再記一筆「沖銷」進去。&lt;/p>
&lt;div class="highlight">&lt;div style="color:#cad3f5;background-color:#24273a;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#cad3f5;background-color:#24273a;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#cad3f5;background-color:#24273a;-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>&lt;span style="color:#6e738d;font-style:italic"># 撤銷某個特定的 Commit&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git revert &amp;lt;commit-id&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6e738d;font-style:italic"># 撤銷完後，會自動產生一個新的 Commit，內容是將該次改動全部還原&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6e738d;font-style:italic"># 這對多人協作的分支來說是最安全的操作！&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="4-遠端協作github--程式碼的社交舞台">4. 遠端協作：GitHub — 程式碼的社交舞台
&lt;/h2>&lt;p>GitHub 讓我們可以把本地的時光機記錄，推送到雲端的「備份中心」。這不僅是異地備援，更是讓你跟全球開發者（或是你的組員）同步時空的關鍵。&lt;/p>
&lt;div class="highlight">&lt;div style="color:#cad3f5;background-color:#24273a;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#cad3f5;background-color:#24273a;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#cad3f5;background-color:#24273a;-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>&lt;span style="color:#6e738d;font-style:italic"># 連結遠端基地&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git remote add origin &amp;lt;GitHub 的 Repo URL&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6e738d;font-style:italic"># 將成果推上雲端&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git push -u origin main
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6e738d;font-style:italic"># 同步遠端的最新時空&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git pull origin main
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="5-專業修煉當線圖開始變成蜘蛛網時">5. 專業修煉：當線圖開始變成「蜘蛛網」時&amp;hellip;
&lt;/h2>&lt;p>隨著專案變大，你會發現 &lt;code>git pull&lt;/code> 抓下來的歷史線圖變得很醜，充滿了「Merge branch&amp;hellip;」的雜訊。這時候，資深開發者會使用 &lt;strong>Rebase&lt;/strong>。&lt;/p>
&lt;h3 id="維持線圖整潔git-pull---rebase">維持線圖整潔：&lt;code>git pull --rebase&lt;/code>
&lt;/h3>&lt;p>預設的 &lt;code>pull&lt;/code> 是 &lt;code>fetch + merge&lt;/code>，會產生一個額外的 Merge Commit。而 &lt;code>--rebase&lt;/code> 則是「將你的修改重新嫁接在最新的基礎之上」，讓歷史維持在一條直線上。&lt;/p>
&lt;div class="highlight">&lt;div style="color:#cad3f5;background-color:#24273a;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#cad3f5;background-color:#24273a;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#cad3f5;background-color:#24273a;-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>&lt;span style="color:#6e738d;font-style:italic"># 告別混亂的 Merge Commit，維持直線歷史&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git pull --rebase origin main
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6e738d;font-style:italic"># 如果發生衝突時，修完檔案後下這行繼續 rebase&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git add &amp;lt;修好的檔案&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git rebase --continue
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="6-離線協作與補丁format-patch-與-am">6. 離線協作與補丁：&lt;code>format-patch&lt;/code> 與 &lt;code>am&lt;/code>
&lt;/h2>&lt;p>想像一個情境：你在一個極其機密的離線環境，或是你想提交 Code 給 Linux Kernel 這種不使用 GitHub PR 的專案。你可以把你的 Commit 封裝成一個 &lt;strong>&lt;code>.patch&lt;/code> 檔案&lt;/strong>。&lt;/p>
&lt;h3 id="製作與套用補丁">製作與套用補丁
&lt;/h3>&lt;div class="highlight">&lt;div style="color:#cad3f5;background-color:#24273a;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#cad3f5;background-color:#24273a;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#8087a2">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#cad3f5;background-color:#24273a;-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>&lt;span style="color:#6e738d;font-style:italic"># [製作補丁] 將最後一個 Commit 轉成 .patch 檔案&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git format-patch -1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6e738d;font-style:italic"># [套用補丁] 正式吃下補丁，它會自動幫你產生對應的 Commit 與作者資訊&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git am 0001-fix-bug.patch
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="結語習慣大於指令">結語：習慣大於指令
&lt;/h2>&lt;p>學會了這些指令，你的 Git 戰鬥力已經超越了大部分的初學者。但我還是要叮嚀一句：&lt;strong>Git 最強大的不是指令，而是你的使用習慣。&lt;/strong>&lt;/p>
&lt;p>嘗試練習「原子化提交（Atomic Commits）」— 一次只做一件事，就存一個檔。這樣當你真的需要坐時光機回去時，才不會發現一個存檔點裡塞了滿滿的垃圾 XD。&lt;/p>
&lt;h3 id="那麼今天也來一點簡單的練習吧">那麼今天也來一點簡單的練習吧！
&lt;/h3>&lt;ol>
&lt;li>嘗試在本地建立一個 Repo，完成一個 Commit 後，使用 &lt;code>git revert&lt;/code> 撤銷它，看看 Commit 紀錄會發生什麼變化。&lt;/li>
&lt;li>在你的 &lt;code>.gitconfig&lt;/code> 裡加上 &lt;code>pull.rebase = true&lt;/code>，感受一下整潔線圖的快樂。&lt;/li>
&lt;/ol>
&lt;p>有任何問題，歡迎在下方留言區討論喔！那麼，我們就下篇文章見囉，掰～&lt;/p></description></item></channel></rss>