---
# System prepended metadata

title: 遠端倉庫命令
tags: [Git]

---

[TOC]

遠端倉庫命令
===


複製/新增/刪除
---

```
git clone (github倉庫網址)
git remote add origin (github倉庫網址)
git remote remove origin (github倉庫網址)
```

顯示所有遠端倉庫的名稱及其對應的 URL
---

```
git remote -v
```

顯示:
origin (github倉庫網址) (fetch)
origin (github倉庫網址) (push)

fetch->遠端拉到本地
push->本地推到遠端

遠端拉到本地(遠端有新增的情況)
---
```
git fetch
```

遠端同步本地(遠端有刪除的情況)
---
```
git fetch --prune
```


刪除origin
---

```
git remote remove origin
```

更改origin名稱
---

```
git remote add my-origin (github倉庫網址)
```

push到遠端
---
```
git push my-origin master
```

改變遠端githunb默認分支名稱
---

github setting -> Branches -> Default branch -> 選擇新的默認分支-> Update

查看分支情況
===

查看本地分支
---

```
git branch
```

查看遠端分支
---
```
git branch -r
```

查看所有隱藏分支(本地+遠端)
---
```
git branch -a
```
查看本地跟遠端分支有沒有同步
---
```
git branch -vv
```


檢查本地跟遠端關聯情況
---
```
git remote show origin
```

查看本地refs分支
---
```
more .git/packed-refs
```

查看遠端refs分支
---
```
more .git/refs/origin/master
```

查看Hash值(指針位置)
---
```
git show-ref
```



清理本地中，已經被遠端刪除的分支
---
```
git remote prune origin
```


遠端跟本地分支交互
===

把遠端的origin master merge 到本地master
---
```
git merge origin/master
```

新增本地分支到遠端
---

遠端跟本地分支沒有關聯的話，會報錯。

方法1(雖然會推到遠端，但還是沒有跟遠端倉庫關聯)

```
git push origin (新分支名稱)
```

方法2:(會推到遠端，且跟遠端倉庫關聯)

```
git push -u origin (新分支名稱)
```

git fetch vs. git pull
===

(pull -> fetch + merge)

![image](https://hackmd.io/_uploads/Bk6NmI37xg.png)


![image](https://hackmd.io/_uploads/Hy_jXU3Qxl.png)




git fetch 之後會產生FETCH_HEAD資料夾
可以回溯git fetch的紀錄

git pull 之後會改變FETCH_HEAD資料夾內容
而且會產生ORIG_HEAD資料夾
存放在merge之前的位置，方便回溯資料

重置到merge之前的位置
---
```
git reset --hard ORIG_HEAD
```



刪除本地已經被merged的分支
===

```
Step1:查看本地已經被merged到該分支的其他分支
git branch --merged master(分支名稱)

Step2: 刪除本地已經被merged的分支

(grep -v 排除master之支)
(xargs 其餘分支執行刪除指令)

git branch --merged master | grep -v "master" | xargs git branch -d


Step3: 清理本地已經被merged的分支和遠端已經被刪除的分支

(本地也刪除，遠端已經被刪除的分支 --> git remote prune origin)

git branch --merged master | grep -v "master" | xargs git branch -d && git remote prune origin

```


刪除遠端分支
===

```
Step1: 確保遠端跟本地同步
git fetch origin

Step2: 查看遠端分支
git branch --remote

Step3: 查看已經被merged到master的分支
git branch --remote --merged master

Step4: 排除master 分支本身
git brnach --remote --merged master | grep -v "master"

Step5: 去除分支前面的 "origin/" 前綴，只留下分支名稱
git branch --remote --merged master | grep -v "master" | sed 's/origin\///'

Step6: 刪除那些已合併進 master 的遠端分支
git branch --remote --merged master | grep -v "master" | sed 's/origin\///'| xargs git push origin --delete

```