什麼是 Git？為什麼要學習它？
什麼是 Git？
如果你問大部份正在使用 Git 這個工具的人「什麼是 Git」，他們大多可能會回答你「Git 是一種版本控制系統」，專業一點的可能會回答你說「Git 是一種分散式版本的版本控制系統」。「版本控制系統」的英文是「Version Control System」，但這個回答，對沒接觸過的新手來說，有講跟沒講差不多。到底什麼是「版本」？要「控制」什麼東西？什麼又是「分散式」？
不管你是不是工程師，只要你是電腦工作者，你每天的工作可能都是每天新增、編輯、修改許多的檔案。舉個例子來說，你可能是一名人資部門主管，你有一個叫做 resume 的目錄，裡面專門用來存放面試者的資料。
讓我們來看圖說故事。
如圖所示，隨著時間的變化，一開始這個 resume 目錄裡只有 3 個檔案，過兩天增加到 5 個。不久之後，其中的 2 個被修改了，過了三個月後又增加到 7 個，最後又刪掉了 1 個，變成 6 個。這每一個「resume 目錄的狀態變化」，不管是新增或刪除檔案，亦或是修改檔案內容，都稱之為一個「版本」，例如上圖圖例的版本 1 ~ 5。而所謂的「版本控制系統」，就是指會幫你記錄這些所有的狀態變化，並且可以像搭乘時光機一樣，隨時切換到過去某個「版本」時候的狀態。
簡單的說，Git 就像玩遊戲的時候可以儲存進度一樣。舉例來說，為了避免打頭目打輸了而損失裝備，又或是打倒頭目卻沒有掉落期望的珍貴裝備，你也許在每次要去打頭目之前之前記錄一下，在發生狀況的時候可以載入舊進度，隨時再來挑戰一次。
為什麼要學習它？
先問大家個問題，大家平常怎麼整理或備份檔案？
以上面這張圖例來說，最傳統也是最方便的方式，便是使用「複製、貼上大法」，然後你可能就會看到像這樣的畫面：
雖然用肉眼就可以知道每個「版本」的用途，但，你能一下子就講出在 resume-2016-05-08 這個目錄裡的那兩個修改過的檔案改了什麼內容嗎？resume-2016-08-22 跟 resume-2016-11-28 這兩個目錄有什麼不一樣的地方嗎？又，那個 resume-bak 跟其它的目錄有什麼不同？最麻煩的是，如果這個目錄是跟其它人一起共同，不管是有心無意，要是檔案被其它同事覆蓋掉了，也完全不知道該怎麼處理。
如果你在乎這些問題的答案，那使用「版本控制系統」就是一個很不錯的選擇。透過這樣的系統，可以清楚的記錄每個檔案是誰在什麼時候加進來、什麼時候被修改或刪除。Git 就是一種版本控制系統，也是目前業界最流行的版本控制系統，沒有之一。
出社會工作，有 Git 幫你保留這些歷史紀錄跟證據，萬一出事的時候你就能知道是從什麼時候開始就有問題，以及知道該找誰負責，再也不用自己背黑鍋了！
所以，到底 Git 有什麼厲害的地方，會讓這麼多人選擇它呢：
Git 是由 Linux 核心的作者 Linus Torvalds 在 2005 年為了管理 Linux 核心程式碼，僅花了 10 天所開發出來的，至目前已有十幾年的歷史了。除了可免費使用外，整個 Git 的原始程式碼也可在網路上取得（當然 Git 的原始程式碼也是用 Git 在做版本控制的）。
如果你是使用前面提到的「複製、貼上大法」，這些備份的目錄會很佔空間。而其它大部份的版控系統大多是記錄每個版本之間的差異，而不是完整的備份整個目錄，所以整個目錄的大小就不會快速的增加。
而 Git 特別的設計，在於它並不是記錄版本的差異，而是記錄檔案內容的「快照」（snapshot），它可以讓 Git 在非常快速的切換版本。至於什麼是「快照」，在後面的章節會再有更仔細的介紹。
對我來說，這個可能是最大的優點了。在以往其它的版本控制系統，例如 CVS 或是 SVN 之類的集中式的版控系統（Centralize Version Control），都需要有一台專用的伺服器，所有的更新都需要跟這台伺服器溝通。也就是說，萬一這台伺服器壞了，或是沒有網路連線的環境，就沒辦法使用。
而 Git 是一款分散式的版控系統（Distributed Version Control），雖然通常也會有共同的伺服器，但即使在沒有伺服器或是沒有網路的環境，依舊可以使用 Git 來進行版控，待伺服器恢復正常運作或是在有網路的環境後再進行同步，不會受影響。而且，事實上我們平常工作上，大多的 Git 操作也都是在自己電腦本機就可以完成。
硬是要說 Git 的缺點，大概就是易學難精吧。雖然 Git 的指令有非常多，而且有的指令有點複雜，但還好平常會用到的指令不太多，根據「80/20 法則」，大概 20% 的指令就足以應付 80% 的工作。
除了在終端機（或命令提示字元）環境的 Git 指令外，也有許多厲害的圖形介面工具，可以讓使用者不用敲打複雜的指令就可以享用 Git 強大的功能。本書也將會使用終端機指令解述概念並以圖形介面工具（例如 SourceTree）輔助說明 Git 是怎麼運作的。
等等…我是設計師，我也可以用 Git 嗎？
基本上，Git 只關心檔案的「內容」，所以只要是檔案，其實都可以使用 Git 來管理。只是，設計師工作產出的檔案大多是 PhotoShop 的 PSD 或是 Illustractor 的 AI 檔，雖然 Git 也可以管理這些檔案，但因為這些檔案（二進位檔）不像一般文字檔可以一行一行的被檢視，所以就沒辦法那麼精準的知道什麼人在什麼時候改了哪些字。但整體來說，使用 Git 還是可以幫得上設計師的忙，至少當檔案不小心被覆蓋或刪除的時候，還可以救回舊的版本的檔案。
這也是很多新手容易有的誤會的，以為 Git 就是 GitHub（或是反過來以為 GitHub 就是 Git）， 甚至也曾看過在公司徵人的職缺上寫著「會使用 GitHub」這項技能。事實上 Git 是一款版本控制軟體，而 GitHub 是一個商業網站，GitHub 的本體是一個 Git 伺服器，但這個網站上的應用程式讓大家可以透過 Web 介面來操作一些原本需要複雜的 Git 指令才能做到的事。
本書後面也有介紹到如何使用 GitHub 與其它人共同協作，雖然 GitHub 很好用，但別忘了 Git 才是本體喔。