看完《為你自己學 Git》三大收穫
這篇文章分享我從《為你自己學 Git》書中獲得的三大收穫。第一,了解版本控制檔案存放在.git資料夾內的機制;第二,基本的版本控制都圍繞著 Commit;第三,如何透過 rebase 重新整理 Commit。這本書讓我對 Git 的運作有了深入的了解,解除了以往對命令行操作的恐懼。
這篇文章會分享看完 《為你自己學 Git》一書後的三大收穫
之前對 Git 的理解就是可以控管版本,但對於具體到底怎運作的一直不是很確定,每次下指令都很怕改壞,看完這本書後雖然很多指令還是記不起來,但至少了解其運作原理是存在目錄內要用再查就快了,而基本上版本是不會被刪掉的所以也不用太擔心改壞專案,看完覺得有三大重點。
※ 註:
- 過程中是透過 Heptabase 去做筆記拆解知識並且重新自己手動建立書中知識節點的關聯,對於理解很有幫助
- Heptabase 文獻筆記連結如下,點開不僅可以看到心智圖還能看到每張筆記的卡片內容:
《為你自己學 Git》的 Heptabase 文獻筆記

一、版本控管的紀錄都放在 .git 的資料夾
其內部運作機制有點複雜不多解釋,有興趣可以去看原書章節【超冷知識】在 .git 目錄裡有什麼東西?Part 1或者上方 Heptabase 的筆記,但簡單說內部檔案的關係會像是樹狀圖的結構如下圖(精確的名稱叫做 Directed Acyclic Graph)。
最重要要了解的就是版本控管的紀錄都會放在這個資料夾內,所有版本在 Git 之下也很難刪除掉;但只要去刪除 .git 資料夾內的內容,你版本控管的紀錄就可能永遠被刪除掉。

二、版本控管的核心就是 Commit
git commit 把 Staging Area 的東西放到 Repository 中永久保存下來,完成備份建立了一個新版本,他就會有一組獨一無二的 SHA-1 值,只要建立版本後就很難主動刪除。
只能透過刪除 .git 或者覆蓋 Commit 去修改,而所謂的分支 Branch 其實只是一種貼紙,貼在 Commit 上其實可以自由的去更改(其實 HEAD、TAG、Branch 都是類似貼紙只是用在不同地方),Git 的版本控管的主體是 Commit。

三、透過 rebase 可以去重新整理 Commit
在做專案時如果推了很多筆 Commit 可能造成事後要透過版本追查程式碼修改的困難,可以透過 rebase 去靈活的修改整理 Commit,舉凡要多合一、一拆多、或者插入新 Commit 在舊的 Commit 中間,或者調整 Commit 順序都能夠做到。
但是如果已經有把版本同步到遠端的 Github,當你修改版後要重新推送後可能就要用到 gut push -f,在團隊合作上可能會覆蓋團隊成員的版本要非常小心,通常只會用在自己作業的分支上。
圖片來源 & 資料來源:《為你自己學 Git》