iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 25
1

今天繼續 猴子 git git 叫 的進階篇。


分支(branch)

  • 當多人同時開發時,會產生多個版本,而「分支」可分開紀錄,不受其他分支影響,達到在同一個 Repository 同時進行多個不同的編輯,且可以在任何時間點再次進行合併。
  • 通常操作模式為,建立一條 主幹,再各自從 主幹 分出去成為 側枝 以進行編輯,側枝 編輯完成再次合併進 主幹
    • Integration:主幹。必須維持穩定,主要是用來保持可以隨時發布可使用的產品。
    • Topic:側枝。專門建立給 開發某個功能、修復特定錯誤等。
  • HEAD:指該分支中,此時最新的 commit。
  • Stash:暫存區。尚未 commit 的內容,可以先存在 Stash,以供事後再取出使用。(當你想要先跳去別的分支,但又不想先 commit 時,則可以先將編輯的內容存在 Stash)
  • 合併分支有兩種方式:
    • merge:合併後,會有完整的紀錄呈現,也意味著紀錄內容較複雜。
      例如:當 master 直接以 merge 合併 topic 後,會保留完整的紀錄。
      https://ithelp.ithome.com.tw/upload/images/20191011/2012098193T5LKTezP.png
    • rebase:合併後,紀錄以較簡潔的方式呈現,直接將合併的內容加在最末端。
      例如:當 topic 先 rebase 到 master,master 再以 merge 合併 topic,紀錄中則會將 topic 加在末端。
      https://ithelp.ithome.com.tw/upload/images/20191011/20120981kJxhlqfBHs.png
  • 指示其合併後,有兩種模式進行處理:
    • fast-forward:當合併時,若兩個分支的歷史紀錄並沒有衝突,則會直接使用 fast-forward,將兩者合併。
      例如:只有 topic 有更新時,topic 可直接加在 master 上。
      https://ithelp.ithome.com.tw/upload/images/20191011/20120981D0zJaNJ1Tw.png
    • non fast-forward:當有歷史紀錄衝突時,會以此方式合併。也可加入指令--no-ff,強迫其進行 non fast-forward。
      (若有需求,可用此方法強迫其完整紀錄,方便以後調查。)
      例如:使用 merge --no-ff,強迫其進行 non fast-forward合併,建立新的 commit。
      https://ithelp.ithome.com.tw/upload/images/20191011/20120981WRnsvMa3CT.png
      (此時會要你註解,以「i」進入編輯,可以「esc」回到指令模式,接著以「:」進入命令列模式,輸入 wq 「enter」後存檔離開 參考
      (以上進入該模式時,是進入vi編輯器
  • A successful Git branching model-最常用來管理分支的辦法:
    A successful Git branching model
    • Main
      • Master:專門負責要發布的版本,並標註版本編號。
      • Develop:開發的主幹線。
    • Feature:分出去的各個小主題,完成後合併回 Develop。此部分可以完全在 local 操作,不需 push 上 remote。
    • Release:開發完後,準備發布前用來最後測試的分支。
      (通常名稱會以此開頭 "release-")
    • Hot fix:用來處理緊急狀況,可直接從 Master 分出來做緊急處理後合併。完成後也要合併回 Develop 做更新。
      (通常名稱會以此開頭 "hotfix-")
  • 所需指令:
    • git branch (分支名稱):從當前分支分出去建立新分支。
    • git branch -d (分支名稱):刪除該分支。
      (必須當前分支與其紀錄沒有衝突,否則用 -D 強行刪除)
    • git branch:查看當前分支。
    • git checkout (分支名稱):移動到該分支。
    • git checkout -b (分支名稱):建立並移動到新分支。
    • git merge (分支名稱) :將該分支合併進當前分支。
    • git rebase (分支名稱):將當前分支加至該分支末端。
    • git rebase --continue:rebase 時,手動合併後,繼續完成 rebase。
    • git rebase --abort:取消 rebase。

與 remote 的互動

  • Pull:從 remote 取得最新紀錄,並合併進 local。
    (pull = fetch + merge)
  • Fetch:取得 remote 的最新紀錄,並導入自動建立的 FETCH_HEAD 分支。
  • Push: 與 remote 以 fast-forward 合併。有衝突都必須先 pull 到 local 處理好合併才能 push。(因為 remote 上的過去紀錄歷史跟現實社會不同是不能修改的,否則會造成混亂。)

鐵人筆記:

  • JS 不熟的新 type
    • Symbol:避免當不同的 Library 向 Object 添加屬性存在命名衝突的風險。(參考
    • BigInt:可以展現比 Number(正負 2的53次方-1)更大範圍的數值,常使用在金融領域。

上一篇
Day 24- 191010學習筆記 Git 入門篇
下一篇
Day 26- 191012學習筆記 Git - Tag / 改寫 commit
系列文
轉職道上的萌芽人生 − 自學程式開發ing30

尚未有邦友留言

立即登入留言