---
# System prepended metadata

title: Gitlab merge request 教學

---

# Gitlab merge request 教學

![](https://i.imgur.com/z6ClRKz.png)


首先每個project 會有一個共同管理的遠端repo，我們常稱作Upstream。


會從這個upstream fork出個人的遠端repo，基本上改動都會是做在個人本端repo以及個人遠端repo上，當有需要其他人來一起協作或討論時可以開放個人遠端repo的權限。

### fork
![](https://i.imgur.com/x3Xq0Ic.png)
點擊畫面Fork可以複製一份自己的repo


### remote repo範例
![](https://hackmd.io/_uploads/S1OofAYE2.png)

可以透過```$git remote add [remote-name] [url]```這個指令來新增遠端的repo目標位置。
<u>[remote-name]可以依據個人習慣來自己定義，通常upstream會定義為最原始repo，通常origin或個人名稱會當作個人管理repo</u>

    
```console
$git remote add upstream git@192.168.3.4:decoder/Mega/libdecoder.git
$git remote add howard git@192.168.3.4:howardhsien/libdecoder.git
```
若想要將upstream程式碼載下來，可以下fetch指令```$git fetch [remote-name]```
```console
$git fetch upstream 
```
很重要的一點是：git fetch 命令只會下載資料到你的版本庫——它並不會自動合併你的任何工作內容，也不會自動修改你正在修改的東西； 當你準備好合併你的工作內容時，你必需用手動的方式進行合併。
若想要將其他人repo程式碼載下來，可以下以下指令(需要先確認是否有他人repo的權限)
```console
$git fetch paul
$git fetch tamino
$git fetch james
$git fetch howard
```
當載下程式碼後可以透過checkout/merge等指令```$git merge [remote-name] [branch-name] ```  ```$git checkout [remote-name] [branch-name] ```來同步或測試他人程式碼
```console
$git checkout howard/develop
$git merge upstream/master
```
![](https://hackmd.io/_uploads/HyEKrMq42.png)



### 權限設定
![](https://i.imgur.com/koNyygf.png)

點選 => Setting -> Members
![](https://i.imgur.com/lZmA0vs.png)
選擇inviting members => 選擇Developer (可以依據欲開放的權限調整)

當大家有共識，或是希望可以合併回共同遠端repo時，可以發送merge request，等待共有repo的負責人進行merge的動作。

### merge request
![](https://i.imgur.com/sU7B7Qf.png)
![](https://i.imgur.com/p3Mmvll.png)
選擇想要申請合併的branch並發送申請，負責人此時會收到email以及gitlab上面會出現有merge request待處理的通知。





Referenece:
https://git-scm.com/book/zh-tw/v2/Git-%E5%9F%BA%E7%A4%8E-%E8%88%87%E9%81%A0%E7%AB%AF%E5%8D%94%E5%90%8C%E5%B7%A5%E4%BD%9C