共同開發一個專案的小筆記2 - rebase 與 squash

之前在共同開發一個專案的小筆記 整理過發一個pull request(PR) 需要走過的流程。這篇將進一步認識如何透過rebasesquashNetwork graph 更乾淨,進而增加開發紀錄的可讀性,也讓 PR 更容易被review。

Rebase

當我們把專案fork下來,並且開了feature branch加以開發,這個專案如果也正在被進行開發,此時我們就會用到rebase
rebase是用來更新(re) feature branch 的根基(base),合併不同分支的進度。可以參考以下流程:

  1. 開了一個 feature branch,並且發了一些commit。
  2. 需要正在開發的 feature 在 project 最新狀態下的表現
  3. Snyc fork
  4. rebase
  5. 查看 feature

Squash

當我們在feature branch上完成了新功能的開發,PR之前,好的做法是將 commit 整理過後再發PR,簡化開發紀錄,
提供其他人正確濃度的訊息量,此時我們就會用到squash

首先,我們可以透過git log 或是 git graph 要找到我們要整理commit的起點(e.g, 3ecccef),接著進入rebase 的 interactive mode

1
2
3
4
5
pick d34548f Add feature 1
pick 98fb1b9 Add feature 2
pick cbf941f Add feature 3
pick 1499a17 Add feature 4
pick 3e14876 Add feature 5

接著就是整理 commit,將要留下來的commit以pick做標記(維持不變),將被融合的commit以squash做標記。

1
2
3
4
5
pick d34548f Add feature 1
squash 98fb1b9 Add feature 2
squash cbf941f Add feature 3
pick 1499a17 Add feature 4
squash 3e14876 Add feature 5

整理過後的 log 則會是,

1
2
pick d34548f Add feature 1
pick 1499a17 Add feature 4

完成後,就可以發 PR 了。