ELI5 · GitHub

GitHub Flow 是什麼?

很多人要改同一堆程式碼,又不能互相砸到。這是大家講好的那套規矩。

🛣️
不要在大馬路上施工
去旁邊開一條便道,修好再接回來

就這一件事。剩下的全是為了讓這件事順利發生。

為什麼要有規矩?

因為程式碼是大家共用的一份
沒有規矩的話,每個人都在同一份上面亂改。

💥
沒有規矩

三個人同時改同一個檔案,誰存檔晚誰覆蓋誰。 有人改到一半就下班了,程式壞在那裡,全隊都不能動。 而且沒人知道是誰、為什麼改的。

🧘
有 GitHub Flow

每個人在自己的線上改,改壞了也只壞自己那條。 改好了要先給人看過才能合回去。 每一次改動都留下「誰、為什麼、誰看過」。

兩個地方,分得很清楚

🏪
main
正在營業的店面

客人隨時會進來,所以它必須永遠是好的。 你不會把貨架拆一半就去吃飯。

🧰
branch(分支)
後面的工作間

你在這裡拆、裝、試、失敗、重來,客人一點都看不到。 弄好了再推出去店面。

畫出來長這樣

main | 店面,永遠是好的 ① 開分支 ← 這段期間,店面照常營業 → ② 改東西,存 commit ③ 開 PR ④ review ⑤ merge

← 左右滑動可以看完整張圖 →

綠線從頭到尾沒斷過——這就是重點。
藍線是你的工作間,合回去之後就可以拆掉了。

實際走一圈

📝
先寫下要做什麼 issue
一張「待辦單」。寫清楚要修什麼、為什麼。這樣之後別人看得懂你在幹嘛,你自己也不會做著做著跑題。
一張有編號的單子,例如 #5。
🌱
從 main 岔出一條自己的線 branch
名字取得讓人看得懂,例如 fix-readme-typo。從這一刻起,你怎麼改都不會碰到店面。
一條新分支。
💾
改東西,存一次進度 commit
commit 就是「存檔點」,每個存檔點附一句話說你做了什麼。做一件事存一次,不要全部堆成一包。
還沒有——commit 這時只在你的電腦裡,要 push 上去才看得到。
🙋
舉手說「我改好了,來看看」 pull request
簡稱 PR。它的意思是「我想把我這條線合進 main,可以嗎?」它不會立刻合併,只是開一個討論區。
一張 PR,裡面自動列出你改了哪幾行。
👀
別人看過,留意見 review
同事可以針對某一行留言問「這裡為什麼這樣寫」。你改完再推上去,同一張 PR 會自動更新,不用重開。
留言、建議,還有「同意」或「要再改」的結論。
🎉
合回 main,分支功成身退 merge
按下合併,你的改動正式進到店面。那條分支的任務結束了,刪掉就好——歷史都留在 main 上,不會不見。
main 前進一步;PR 關閉;分支可以刪除。

整套規矩,濃縮成兩條

鐵律 1
main 永遠是能用的

任何時候從 main 拉下來,它都應該跑得起來。 所以做到一半的東西絕對不進 main——這就是為什麼要有分支。

鐵律 2
改動一律走 PR,不直接推 main

就算你一個人做專案也一樣。因為 PR 留下的不只是程式碼, 還有你當時為什麼這樣改——三個月後回來看的人是你自己。

PR 不只是把東西搬過去

它同時是三樣東西。這是很多人一開始沒看出來的地方。

💬
討論區

針對某一行程式碼吵架的地方,比在聊天室貼截圖清楚一百倍。

🚦
關卡

測試沒過、沒人同意,就合不進去。機器和人都在這裡把關。

📜
紀錄

半年後有人問「這行為什麼長這樣」,答案就在當年那張 PR 裡。

為什麼叫 Flow? 因為它是一條「流」——同一條路,每次都照著走。 重點不在哪一步多厲害,而在每個人都走同一條,所以誰接手都看得懂。

想再深入一點