Git merge request 之後 local master 與 主專案需要再 merge 一次

通常我們發merge request 給主branch之後,待request 被接受之後在local 端最好再跟遠端的主branch 做一次 fetch --all merge回發request 的branch。


舉例:
假設我們主要Git 專案為God,然後我從主專案(God) branch一份到自己的git去開發
接在我在 local 端拉自己的branch 下來並且兩個 branch :
origin master       <= merge develop 完成的功能然後用它發 merge request 回主專案
origin develop     <= 主要開發用分支

然後我除了自己的remote外還會加入主專案的remote: (用 git remote -v 看全部,git remote add可以去新增)
origin git@xx.xx.xx:clover/God.git (fetch)
origin git@xx.xx.xx:clover/God.git (push)
upstream  git@zz.zz.zz.zz:Main/God.git(fetch)   <= 主專案的等等介紹我為什麼要加這個
upstream  git@zz.zz.zz.zz:Main/God.git(push)   <= 主專案的 remote 等等介紹我為什麼要加這個

平常我都是先用 develop這個 branch 開發,開發完成就 merge到 master 然後push 到 git server, 接著我到server上用我的clover: master發 merge request給 Main/God.git 跟管理員說:我要merge 回主專案。

待管理員接受我的merge request後 Main/God.git就會有我的功能。在這邊其實gitlab 在merge的時候會幫你偷偷的commit一條訊息上去,但也因為這樣可能導致你local端的 master log跟主專案的log會不一致。 所以這邊我們可以用下面的方式來確保自己local跟主專案的log 一致。

1. 主專案merge之後因為我在local 有加主專案的 remote 所以此時我們可以下 #git fetch --all 更新一下所有的remote:
               # git fetch --all

2. 更新後我們再把local 的master upstream的mastermerge (因為他是主專案)。

               # git checkout master                     => 先回到 master
            # git merge upstream/master      => 讓我們local 的 master 與遠端主專案 merge

3. 此時在local 的master log就會跟主專案一致。

4.我們再把local 的master merge回去開發用的分支(當然如果開發用的分支已經不再需要就可以不用merge回去或是你要直接用目前最新的local master 在branch 出一個新的開發分支也可以,端看你接下來要怎麼做)。 這邊我打算繼續使用develop 所以再從 local master merge 回 develop。
               # git checkout develop          => 切回 develop
            # git merge master                => merge master 同步

5. 最後再把我自己local 端 master 與 develop  push 回我在server上的自己專案(git@xx.xx.xx:clover/God.git) 讓server那邊的內容也同步。
                # git push origin develop               => 如果你之前有把分支 push 到server
                                                                           就順便更新,如果沒有push 分支到server
                                                                           就跳過。
                # git checkout master                  => 跳回local master
                # git push origin master             => 把我的server上的master與local 
                                                                          master 同步(等於內容跟主專案一致)


  • 流程大概是下面這樣子:

留言