Rebase a fork using TortoiseGit
工作需求,要將 Fork 專案 (某個 Repository 的副本),對於原始的 Repository,做一次 Rebase 更新基底程式碼,簡單紀錄概念以及操作步驟。
想法概念
下面兩張圖解釋一切,希望 Master 後續的版本更新(Commits),能讓 Feature branch 也能使用的到。
做法可以想法是,計算 Feature branch 上的新 Commits,全部收集起來,然後一個一個 Recommit 到 Master branch 上。
而這次的所執行的更新,Master 是之前 Fork 其他專案的 Master branch,稱為 upstream,Feature 則是目前正在工作的 Master branch。
操作步驟
首先使用 CommandLine,進入到操作 Repository 資料夾,手動新增遠端 upstream branch。這一個遠端 upstream,是之前的 git fork repository。
cd c:\example
git remote add upstream siyuan@git.twsiyuan.com.tw/example.git
在開始執行 Rebase 之前,養成好習慣先更新到最新的資料,當前的 branch feature 要 pull,遠端 upstream branch 也使用 fetch 指令更新 。
git pull "origin"
git fetch upstream
接下來執行 Rebase command,但這步驟不在 CommandLine 中執行 git rebase upstream/master
,而改用 TortoiseGit Rebase,是因為 TortoiseGit 有準備一個可愛的 GUI 介面。
按下 Start Rebase 直接開始。另外可以針對特定 Commit 使用四種不同的方式進行 Recommit,分別是 Pick, Squash, Edit, 以及 Skip。這四個方式的差異,用以下圖解釋。
將結果上傳到 Remote
最後執行強制 Push 將 Rebase 後的結果上傳到遠端,並且覆蓋原本的 master branch。
git push remote master --force
這樣覆蓋是很暴力,可能會導致其他同仁目前的編輯出錯,工作中的 Master branch 沒辦法與遠端 Rebase Master branch 合併。
因此在執行 Rebase 之前,得先通知大家做好準備,要求大家先執行 Push,編輯中的檔案先丟在 Stash。待 Rebase 後的 branch 覆寫 remote 後,再請大家重抓資料,並 Switch 到該 branch 再進行作業了。
沒有留言: