git命令
何謂同步遠(yuǎn)程分支?有幾種情況:
本地有新分支汰瘫,遠(yuǎn)程倉庫沒有。
遠(yuǎn)程倉庫有新分支擂煞,本地沒有混弥。
本地刪除了分支,遠(yuǎn)程也想刪除对省。
遠(yuǎn)程刪除了分支蝗拿,本地也想刪除。
第一種情況很好解決蒿涎,將本地分支推送到遠(yuǎn)程倉庫即可哀托。
本文主要講解后面幾種情況的解決辦法。
1. 第二種情況:遠(yuǎn)程倉庫有新分支劳秋,本地沒有仓手。
這在之前我先介紹幾個命令。
$ git fetch # 將某個遠(yuǎn)程主機(jī)的更新玻淑,全部取回本地:
$ git branch -a # 查看遠(yuǎn)程分支:
$ git branch # 查看本地分支:
$ git checkout [<options>] <branch> # 切換分支
熟悉了以上命令嗽冒,接下來我們通過一個例子來講解第二種情況的解決辦法。
假如我本地有個git倉庫补履,別人推送了一個新分支到遠(yuǎn)程倉庫添坊,我要獲取這個分支到本地,該怎么辦箫锤?
我需要git branch查看一下本地分支贬蛙,再git branch -a查看一下遠(yuǎn)程分支,對比下谚攒,遠(yuǎn)程存在哪些本地沒有的新分支阳准。但發(fā)現(xiàn),本地和遠(yuǎn)程的一樣五鲫。奇怪溺职,在遠(yuǎn)程倉庫(gitlab/github)明明看到了新分支啊。
原來現(xiàn)在本地上的現(xiàn)在的遠(yuǎn)程分支記錄是克隆倉庫時當(dāng)時的分支記錄位喂。所以我需要
- 首先將某個遠(yuǎn)程主機(jī)的更新浪耘,全部取回本地:git fetch
- 再次查看遠(yuǎn)程分支:git branch -a 發(fā)現(xiàn)遠(yuǎn)程的分支已經(jīng)可以看見了。
- 然后拉取遠(yuǎn)程分支到本地:git checkout -b 遠(yuǎn)程分支名 origin/遠(yuǎn)程分支名
注:直接克隆整個倉庫塑崖,可以直接使用git checkout 分支名切換到分支七冲。因為克隆時候已經(jīng)有遠(yuǎn)程所有的分支記錄。但若之前已經(jīng)克隆過规婆,后來其他電腦新push一個分支澜躺,此時是無法切換到新分支的蝉稳。使用上述命令可拉取最新分支(原理是在本地新建一個分支和遠(yuǎn)程分支關(guān)聯(lián)起來)
2. 第三種情況:本地刪除了分支 遠(yuǎn)程也想刪除。
這在之前我先介紹幾個命令:
$ git push origin -d <branch> # 刪除遠(yuǎn)程分支. branch: 分支名
$ git branch -d <branch> # 刪除本地分支. branch: 分支名
熟悉了以上命令掘鄙,接下來我們通過一個例子來講解第三種情況的解決辦法耘戚。
假如我在本地想要刪除某個分支,我也想把遠(yuǎn)程倉庫的這個分支也要刪掉怎么辦操漠?
- 使用git branch -d 分支名來刪除本地分支收津。
- 使用git push origin -d 分支名直接來刪除遠(yuǎn)程分支。在次使用git branch -a,發(fā)現(xiàn)分支已經(jīng)不存在了浊伙。
或者
- 使用git branch -d 分支名來刪除本地分支撞秋。
- 最簡單的解決辦法就是直接到gitlab/github進(jìn)行刪除.
假如我只想把遠(yuǎn)程的刪除掉怎么辦?
- 使用git push origin -d 分支名直接來刪除遠(yuǎn)程分支嚣鄙。此時刪除的只是遠(yuǎn)程的分支吻贿,本地仍然存在
或者
- 直接到gitlab/github進(jìn)行刪除.
3. 第四種情況:遠(yuǎn)程刪除了分支 本地也想刪除
這在之前我先介紹幾個命令。
$ git remote show origin # 查看遠(yuǎn)程分支和本地分支的對應(yīng)關(guān)系
$ git remote prune origin # 刪除遠(yuǎn)程已經(jīng)刪除過的分支
熟悉了以上命令哑子,接下來我們通過一個例子來講解第四種情況的解決辦法舅列。
假如我直接到gitlab/github刪除了某個分支,我在本地使用 git branch -a
查看遠(yuǎn)程分支赵抢,依然存在并且可以切換使用剧蹂。我本地也想把遠(yuǎn)程分支記錄刪除怎么辦?
執(zhí)行命令
git branch -a
查看遠(yuǎn)程分支烦却,紅色的是本地遠(yuǎn)程遠(yuǎn)程分支記錄執(zhí)行命令
git remote show origin
查看遠(yuǎn)程倉庫分支和本地倉庫的遠(yuǎn)程分支記錄的對應(yīng)關(guān)系會看到:
refs/remotes/origin/遠(yuǎn)程倉庫已經(jīng)刪除的分支名 stale (use 'git remote prune' to remove)
其中:
Local refs configured for 'git push': 命令下面的分支是本地倉庫的遠(yuǎn)程分支記錄中仍存在的分支宠叼,但遠(yuǎn)程倉庫已經(jīng)不存在。
執(zhí)行命令
git remote prune origin
來刪除遠(yuǎn)程倉庫已經(jīng)刪除過的分支執(zhí)行命令
git branch -a
查看遠(yuǎn)程分支其爵,此時可以看到本地遠(yuǎn)程分支記錄已經(jīng)和遠(yuǎn)程倉庫保持一致了冒冬。