# 為你自己學 Git（第二版）- 寫在最前面

> 本書《為你自己學 Git（第二版）》提供了 Git 的基礎知識和指令使用說明，適合對 Git 有興趣的讀者。書中詳述了 Git 的常用指令、使用情境及多人協作流程，並針對新版本的指令進行了更新。透過實用的例子和清晰的解釋，幫助讀者有效掌握 Git 的核心觀念和技術。

Published: 2023-09-12
URL: https://kaochenlong.com/gitbook-v2-intro

---

**本書正在連載、撰寫中，待完稿後會集結成冊出版**

&gt; 人生不能重來，但 Git 可以！

不知道大 家是否曾經看過周星馳的電影呢？在周星馳的《大話西遊》電影裡，主角至尊寶拿著月光寶盒大喊一聲「波若波羅密」便可穿越時空，回到過去救他的娘子；或是陪我們一起長大的動畫《多啦 A 夢》，只要拉開房間的抽屜裡、搭上時光機，隨時可以回到過去拯救世界。雖然以目前人類的科技應該還不能真的做出穿越時空的時光機（有的話請務必讓我知道，我要回到過去買大樂透！），不過對電腦工作者來說，Git 這個工具就像時光機一樣的神奇，可以讓你回到特定的時間點，或是救回不小心被刪除的檔案。

以目前現行的 Git 版本（2.42.0）來說，從比較常見的高階指令（Porcelain）到比較不常用的低階指令（Plumbing）加一加大概有一百多個，但在一般工程師的日常使用指令大概頂多十來個。如果各位讀者原本日常工作就有在使用 Git 的話，應該會知道 Git 常用的指令大概就是那幾個，像是 `git add`、`git commit` ，開分支、合併分支，也許再加個 `git push` 跟 `git pull` 上傳、下載同步進度，加起來常用的指令大概真的就十來個吧，看起來很容易（事實上也不難）。

不過在第一版的《為你自己學 Git》出版到現在這五年期間，我曾在許多學校、社群及企業內部分享或講授 Git 的使用技巧的時候，才發現事實上並不是這麼一回事。

&lt;!-- more --&gt;

Git 是個看起來很簡單但卻不容易學好或精通的工具。Git 不好學或學不好有幾個常見的原因，第一個原因就是有些指令跟使用情境不一定搭的起來。舉個例子，當你看到 `checkout` 這個單字會想到什麼？對我這種非英文母語或是英文沒那麼好的人來說，我第一個想到的可能會是飯店退房的「Check Out」，但 `git checkout` 這個指令是用來切換分支或是可以把不小心修改或刪除的檔案給救回來。

另外，在 Git 裡要完成特定的工作可能不只有一種做法，對老手來說可以用各種花式指令組合來完成任務，但這種「殊途同歸」對新手學習者來說就不一定是好事了。在不理解這些 Git 指令在做什麼的情況下，條條大路通羅馬的炫技組合可能更容易讓新手更容易覺得迷惑。

特別是 Git 這個工具在學校不一定會教，即使是資訊本科生很多也是出社會或到公司才學著怎麼用 Git，如果沒有適當的引導，把 Git 用成的歪七扭八的形狀也是很正常的。

坊間的參考書籍（例如本書的第一版）或網路上的資料可能會教大家使用像是 Sourcetree 之類的圖形介面軟體（GUI），或是從終端機（Terminal）指令來學習 Git，這並沒有不好，只是 Git 的學習重點不在指令或軟體，而是在觀念跟使用情境。而且不管是用圖形介面軟體或是指令，這兩個管道並沒有衝突，圖形介面軟體容易使用而且在視覺上容易理解，而終端機指令可以做更細部的操作以及觀念建立。如果在學習的時候能用終端機指令配合視覺上畫面的變化，可以讓 Git 的學習曲線稍微緩和一些，更能知道到底 Git 的這些指令在做些什麼事。

因為個性的關係，在學習新事物的過程中如果有疑惑的地方，總是希望可以搞懂為止，否則知其然而不知其所以然，沒辦法真的把一門技術搞懂會痛苦得睡不著覺。也因為這樣，本書在撰寫的時候也發揮了我囉嗦的專長，即使是很簡單的小地方，也希望可以儘量解釋清楚。希望可以不只可以教大家如何用（How），也能讓大家知道在用什麼（What），以及為什麼（Why）要這樣用。

本書主要是以中文撰寫，但專有名詞大多還是英文，這些名詞也許我會視情況使用譯文或原文來表示。除了每個人的翻譯可能不一樣或是翻譯之後沒有原文貼切之外，同時也希望各位能趁早習慣這些英文名詞，因為實際在業界工作時，很多第一手的資料都是英文的，早點習慣對大家一定是有幫助的。

## 第二版有什麼不同？

這幾年來 Git 的版本號跳了不少，但我們常用的那些 Git 指令變動不算太大，甚至在第一版書裡介紹到的指令，現在應該都還可以用。所以第二版除介紹一些新加進來的指令（像是 `git switch` 跟 `git restore`），還加上了這幾年我自己遇到以及去企業做內訓或技術顧問的時候幫忙解決的疑難雜症。老實說，在寫第一版《為你自己學 Git》的時候，有些觀念或比喻不一定那麼正確或貼切，也會在這個版本一併修正。

雖然並不是每個人都能用正確的姿勢使用 Git，但過了這些年，相信現在對大家對 Git 也沒那麼陌生，在這方面也算民智已開，單兵作戰應該沒什麼問題。不過多人協作的時候可能因為習慣不好或是沒有講好開發流程，可能時不時炸到隊友或自己，所以在第二版的《為你自己學 Git》除了介紹傳統派的 Git Flow 之外，同時還會加上其它流派的 Flow，例如 GitHub Flow 以及 GitLab Flow。

總不能只換一些新的插圖就推出第二版，那就太沒誠意了 :)

## 誰適合本書

只要你對 Git 這個工具有興趣都適合。

如果你平日的工作已有在使用 Git，本書大部份的內容對你來說應該是相對的輕鬆；但即使已經原本就有在使用 Git 的讀者，也可從本書學到一些「本來以為 Git 是這樣，但其實是那樣」的觀念。

## 本書內容

### 會包括以下內容

- 常用 Git 指令介紹。
- 各種 Git 的常見狀況題及使用情境。
- 如何修改 Git 的歷史紀錄。
- 如何使用 Git 以及 GitHub 或 GitLab 與其它人一起工作。
- 以及一般平常工作用不到但對觀念建立有幫助的冷知識。

### 你需要準備什麼？

- 一台可以工作的電腦（不限定作業系統）
- 這樣就夠了 :)

## 如何使用這本書

本書主要分以下幾部份：

1. 環境安裝與設定
2. 開始使用 Git
3. 使用分支
4. 使用標籤
5. 修改歷史紀錄
6. 常見狀況題
7. 多人協作流程

每個章節的內容雖然或多或少跟前面的章節有關，但也不一定要從第一章開始依序閱讀（當然這也是一種方式），可依自己實際需求跳過部份章節。

## 使用軟體版本

在本書撰寫的當下的 Git 版本為 `2.42.0`，也許本書出版後的版本會有些不同。您可使用 `git version` 指令來檢視您目前所使用的 Git 版本：

    $ git version
    git version 2.42.0

各位在閱讀本書的時候，並不一定需要跟我安裝一模一樣的版本，不過如果 Git 的版本太太舊，可能有些指令執行的結果會有些微不同，或是有些比較新版的 Git 指令在執行的時候會出現「不是一個 git 指令」的錯誤訊息。

## 本書程式碼慣例

在本書介紹 Git 的時候，會有很多機會需要在「終端機」模式下輸入指令，例如：

    $ git add index

或是這樣：

    $ git commit -m &quot;init commit&quot;
    [master (root-commit) 5d47270] init commit
     2 files changed, 1 insertion(+)
     create mode 100644 config/database.yml
     create mode 100644 index.html

在最前面的 `$` 符號是系統提示字元，意思是告訴大家這是一個需要在終端機環境下手動輸入的指令，而下一行的內容則是這個指令執行之後的結果。各位跟著練習的時候請不要跟著輸入 `$` 符號，不然可能會出現 `command not found` 的錯誤訊息。

## 程式碼範例及錯誤更正

本書所有的範例在 Git 版本 `2.42.0` 以及 macOS `13.5.1` 版本作業系統的環境下均已測試可正常執行，部份範例可在[五倍學院的 GitHub 帳號](https://github.com/5xTraining/gitbook-v2-examples)取得。隨著軟體的版本演進，或是作業系統的不同，範例程式執行的結果可能會有些微的差異（甚至是錯誤）。若有任何問題，或是有哪邊寫錯，還請各位先進不吝來信、留言指教。

最後，感謝各位支持第一版的《為你自己學 Git》，獲得了 26 刷的好成績，我在第二版加入了更多實用的內容，也希望各位會喜歡這本書，一同來學習 Git 這個看似好學但又不容易學得好的有趣工具 :)

GitHub 連結：https://github.com/5xTraining/gitbook-v2-examples

## 關於學習

### 輸入指令的過程可能很嚇人，但它很重要！

對剛剛接觸 Git 的新手來說，打開終端機視窗，像電腦駭客一樣輸入指令感覺是件嚇人的事。

前面也提到雖然有不少像 Sourcetree 之類的圖形介面工具，以學習的角度來說，我個人仍是強烈建議一定要了解 Git 的運作原理。而透過輸入並執行這些 Git 指令以及參數，正是最容易可以了解 Git 運作的方法之一。

不要害怕輸入指令、不要害怕那些看起來很嚇人的訊息，不然即使有圖形介面工具軟體，也可能不知道按了這個按鈕之後會發生什麼事，最終導致用不正確的方式在使用 Git，事倍功半。

### 觀念很重要

很多人，包括我自己也是，在一開始學習 Git 的時候，只覺得它就是簡單的學習 `git add` 跟 `git commit` 之類的基本操作指令罷了。但其實這就有如跟冰山一角，沈在水底下的比在浮在水面上的還多，Git 的運作方式遠比這些指令來得複雜得多。所以，如果可以建立正確的觀念，在遇到問題的時候就比較不會疑惑，更知道可以用哪些指令組合來解進問題。

## 關於我

高見龍，這看起來有點像武俠小說的名字並不是筆名，而是我父母給我的本名。目前是兩個小朋友的爸爸，是個愛寫程式而且希望可以寫一輩子程式的電腦阿宅。

- [五倍學院（五倍紅寶石程式資訊教育）](https://5xcampus.com)創辦人及負責人
- Blog: &lt;https://kaochenlong.com&gt;
- Facebook: &lt;https://www.facebook.com/eddiekao&gt;
- Twitter: &lt;https://twitter.com/eddiekao&gt;
- Github: &lt;https://github.com/kaochenlong&gt;
- Email: eddie@5xcampus.com

若發現本書內容有誤或有任何問題，歡迎直接來信，或到本書網站 &lt;https://gitbook.tw&gt; 留言 :)



