2020年4月26日 星期日

Git: 四種將分支與主線同步的方法

四種將分支與主線同步的方法

  • git pull origin master
  • git fetch origin master; git merge origin/master
  • git fetch origin master; git rebase origin/master
  • git fetch origin master; git cherry-pick origin/master
先來做名詞解釋和看一些範例。

名詞解釋

  • master:本地分支名。
  • origin master:origin 表示遠端,master 表示分支名,接在 origin 之後表示是遠端分支名。
  • origin/master:遠端分支在本地的拷貝,因此稱為本地分支。

範例

  • git fetch origin master:取得遠端分支 master 的資料。
  • git merge origin/master:合併本地分支 origin/master 的程式碼。
  • git push origin master:將本地提交紀錄推至遠端分支 master。

說明

方法一:git pull

  • Step 1:切換到新分支。
  • Step 2:從遠端更新程式碼,並將 master 合併至新的分支。HEAD 指向新分支的程式碼。
$ git checkout <new_branch>
$ git pull origin master
加入參數 --rebase,這樣就會以 rebase 的方式合併(同註一)。
  • Step 1:切換到新分支。
  • Step 2:在分支 <new_branch> 合併從遠端更新完畢後的 master 的程式碼,並以 rebase 的方式合併。HEAD 指向 master 的程式碼。
$ git checkout <new_branch>
$ git pull origin master --rebase

方法二:git fetch + git merge

  • Step 1:取得遠端資料並更新本地 master 程式碼。
  • Step 2:將 master 的程式碼合併至新分支中。HEAD 指向新分支的程式碼。
$ git fetch origin master
$ git checkout master
$ git merge origin/master

$ git checkout <new_branch>
$ git merge master
以下是更簡單的作法,不更新本地 master 分支,直接與本地分支 origin/master 合併。
$ git fetch origin master
$ git merge origin/master

方法三:git fetch + git rebase

  • Step 1:取得遠端資料並更新本地程式碼。
  • Step 2:切換到新分支,新分支以 master 為新的基準點,將分支所修改的程式碼紀錄接在後面。HEAD 指向新分支的程式碼。
$ git fetch origin master
$ git checkout master
$ git merge origin/master

$ git checkout <new_branch>
$ git rebase master
也可以這樣寫,不切換到新分支,直接指定新的基準點。
  • Step 1:取得遠端資料並更新本地 master 程式碼。
  • Step 2:以 master 為新的參考基準點,將分支 <new_branch> 的修改接在新的基準點後。
$ git fetch origin master
$ git checkout master
$ git merge origin/master

$ git rebase master <new_branch>
以下是更簡單的作法,不更新本地 master 分支,直接以 origin/master 為新的基準點,將新分支所修改的程式碼紀錄接在後面。
$ git fetch origin master
$ git rebase origin/master
註一
方法三的意義等同於 git pull origin master --rebase

方法四:git cherry-pick

  • Step 1:從遠端取得更新,接著切換到新分支。
  • Step 2:使用 cherry-pick 將目前 origin/master 所在位置與新分支差異的提交紀錄揀選(合併)至新分支,並需要建立一個提交紀錄來儲存這些變更。
$ git fetch origin master
$ git checkout <new_branch>
$ git cherry-pick origin/master
但不建議使用這個方法,因為在 graph 中並不會顯示合併,而是將 master 的某些提交紀錄「揀選」到新分支形成分岔。並且,之後若要合併回主線,仍須再解一次衝突。解完 conflict 後若無差異,則會回到使用 cherry-pick 合併後的狀況(註 2)。由於找不到類似的資料,因此在這裡提問。
註 2
之後要合併回主線仍需使用前三種方法,例如:使用 git pull origin master,這樣就會形成一個小耳朵,表示回到主線了。

from : https://cythilya.github.io/2018/06/19/git-merge-branch-into-master/

沒有留言:

張貼留言