通常我們發merge request 給主branch之後,待request 被接受之後在local 端最好再跟遠端的主branch 做一次 fetch --all merge回發request 的branch。
平常我都是先用 develop這個 branch 開發,開發完成就 merge到 master 然後push 到 git server, 接著我到server上用我的clover: master發 merge request給 Main/God.git 跟管理員說:我要merge 回主專案。
1. 主專案merge之後因為我在local 有加主專案的 remote 所以此時我們可以下 #git fetch --all 更新一下所有的remote:
2. 更新後我們再把local 的master 跟 upstream的master做merge (因為他是主專案)。
3. 此時在local 的master log就會跟主專案一致。
4.我們再把local 的master merge回去開發用的分支(當然如果開發用的分支已經不再需要就可以不用merge回去或是你要直接用目前最新的local master 在branch 出一個新的開發分支也可以,端看你接下來要怎麼做)。 這邊我打算繼續使用develop 所以再從 local master merge 回 develop。
5. 最後再把我自己local 端 master 與 develop push 回我在server上的自己專案(git@xx.xx.xx:clover/God.git) 讓server那邊的內容也同步。
舉例:
假設我們主要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 等等介紹我為什麼要加這個
待管理員接受我的merge request後 Main/God.git就會有我的功能。在這邊其實gitlab 在merge的時候會幫你偷偷的commit一條訊息上去,但也因為這樣可能導致你local端的 master log跟主專案的log會不一致。 所以這邊我們可以用下面的方式來確保自己local跟主專案的log 一致。
# git fetch --all
# git checkout master => 先回到 master
# git merge upstream/master => 讓我們local 的 master 與遠端主專案 merge
# git checkout develop => 切回 develop
# git merge master => merge master 同步
# git push origin develop => 如果你之前有把分支 push 到server
就順便更新,如果沒有push 分支到server
就跳過。
就順便更新,如果沒有push 分支到server
就跳過。
# git checkout master => 跳回local master
# git push origin master => 把我的server上的master與local
master 同步(等於內容跟主專案一致)
master 同步(等於內容跟主專案一致)
- 流程大概是下面這樣子:
留言
張貼留言