2021-03-26

git note 2 - 以指定分支中的特定檔案取代目前分支的同一個檔案

有時候在專案中想開發某功能而又想保留目前專案的可用性,在 git 中會以用 branch (分支) 的方式來進行,等此分支中該功能已開發完整後,再 merge (合併) 到原本的專業主線 (main, master) 來更新新功能。

可是,有時候在分支開發時發現專案中其他的功能有一些小 BUG 在還沒開分支前就已經存在,但在現在有開分支的情況下,改了分支中的 BUG 但主線的卻還是舊的,只能 checkout (切換) 到主線後再改一次同一個 BUG 的部份才行。

這種狀況,一般有幾種處理的方式:

  1. 回到主線,然後把分支合併回主線
    • 這會有另一個問題是本來分支主要是要開發新功能的部份可能會在還沒有開發完整的情況下就合併到主線上,結果造成主線不協調
    • 為了要再繼續改新功能,還需要再開分支再改
  2. 先複製好在分支為了修改 BUG 而影響的檔案的內容,再切換到主線時再將那一些檔案的內容貼上
    • 應該這種沒啥大問題,主要就是考驗記憶力或準備的齊不齊全


接著來談談第 3 種方式,這方式是利用 git checkout 的功能來以指定分支中檔案來取代主線的
git checkout <branch-name> <spec-path-file1> <spec-path-file2>

 舉個例子:

master: 有 a, b 程式,b 程式中有個 function 的內容是印出 'a' 在 console 上,但寫法是 console.lo('a')

上級要求要開發 c 程式,所以建了一個分支 x ,在 x 中建立了 c 程式。

有天有人提出問題問說 b 程式不是有個地方是要在 console 中印出 'a' 的,為什麼都沒看到,檢查之後還現 console.log('a') 寫成 console.lo('a')

但目前 c 程式還沒開發完整,所以不能被 master merge ,這時就可以利用上述的指令

git checkout x /src/b_code

以上就是目前專案的分支所在是在 master 的 src/b_code 要以 x /src/b_code 來蓋過

沒有留言: