git的遠端分支是幹啥的,和本地的有什麼區別?

2021-10-25 09:17:29 字數 2481 閱讀 4388

不知道大家有沒有經歷過,當我們切換到了乙個新的分支想要提交**的時候,總會遇到這樣的錯誤。

我們把日誌裡的英文翻譯過來是說,我們當前的分支沒有設定任何上游分支。然後git提示我們可以執行下面這行**來設定遠端的上游,這樣我們就可以push成功了。

當然如果我們push的時候執行的不是git push,而是後面再加上origin的話,就可以push成功了。比如這樣:

那麼這是什麼原因呢?這個origin分支又是什麼意思呢?我們今天就來討論一下這個問題。

遠端分支其實就是遠端**倉庫當中的分支,比如我們的repo如果是存在github的,那麼這個遠端倉庫就是github,如果是存在gitlab的,那麼這個倉庫就是gitlab,如果是其他的倉庫也是一樣的道理。

當我們在使用git clone的時候,git會自動地將這個遠端的repo命名為origin,拉取它所有的資料之後,建立乙個指向它master的指標,命名為origin/master,之後會在本地建立乙個指向同樣位置的指標,命名為master,和遠端的master作為區分。

也就是說,origin的含義指的是遠端的倉庫。它只是乙個標記,就和預設分支叫做master一樣,本身並沒有特別的含義。如果我們願意也可以起其他的名字,但是一般沒有人這麼幹。比如我們在clone的時候可以新增乙個引數-o給遠端的repo起乙個別名:

git clone -o chengzhi
這樣一來,遠端的這個repo就會被命名為chengzhi,代替原本的origin。但是這樣除了裝逼和增加成本之外,沒有任何用處,不推薦這麼幹。

還記得我們之前在介紹git的時候曾經說過遠端repo的作用,就是為了防止本地的**錯亂,所以在遠端留乙份備份。這樣即使我們的**完蛋了,至少還可以找到備份。

所以遠端的repo最大的作用就是保留備份,既然要保留備份,那麼我們本地和遠端的**互動肯定是免不了的。大家可能都大概知道git pull從遠端拉取,git push推送到遠端,但是對於這其中的細節可能不太清楚。之前沒有詳細介紹過遠端分支,所以也沒辦法深入,我們今天剛好聊到這個話題,正好好好說道說道。

我們先說**拉取,說到**拉取大家的第一反應可能是git pull。但是其實git pull並不是嚴格意義上的**拉取命令,至少它還不是最細粒度,其實還有乙個比git pull更加細粒度的操作。它就是——git fetch。

當我們使用git checkout切換過去的時候,可以不必加上origin,git會自動生成乙個本地的分支指標,也指向同樣的節點。它相當於我們執行了git checkout -b test origin/test。說到這裡就需要提一下git pull和git fetch的區別了,這兩者從表面上來看都是拉取遠端的改動。但是兩者針對的範圍不同,git fetch針對遠端的所有改動,而git pull只針對當前分支對應的遠端分支。另外git pull執行之後會將遠端的改動merge到本地的分支,也就是說它其實多了一步merge的操作。

說到**推送回到了我們開頭的那個問題,什麼情況下git push就可以,什麼情況下需要加上origin呢?

這裡涉及乙個機制就是本地的分支是不會自動和遠端同步的,比如遠端有人建立了乙個test分支,我們拉取到本地會叫做origin/test。我們也可以自己建立乙個test分支,和它井水不犯河水。這也是為了方便,如果直接用名稱對映的話,可能會有潛在的衝突。並且由於可能會存在多個遠端repo,所以我們push的時候也會有多種選擇。

最完整的push命令是應該寫成這樣的:

git push origin test:cz/test
我們注意到這裡用了乙個奇怪的寫法test:cz/test,它的意思是說將本地的test分支推送到遠端作為cz/test分支。如果我們想要本地的名稱和遠端一樣,我們可以省略簡寫成:git push origin test。

如果我們設定過當前test分支的上游是遠端的test,或者本地的test就是從origin拷貝過來的,那麼我們可以直接git push,它會自動將本地的分支與遠端關聯上,會方便很多。實際上我們大多數的push操作都是這麼進行的。將本地分支和遠端建立對映可以使用這個命令:

git branch --set-upstream-to master origin/master
它表示的是將本地的master和遠端的master進行關聯,設定過關聯之後我們只需要git push和git pull就可以更新和推送這個分支了,會方便很多。

關於遠端分支還有一些內容我們沒有涉及,比如如何跟蹤遠端的分支,如何刪除等等。由於這些內容幾乎用不到,我們即使強行記住了到時候也會忘記,所以就不多贅述了。

Git 刪除本地和遠端的分支

分支使用完畢之後需要刪除,執行如下命令檢視所有的分支,目的是需要刪除掉dev分支。先執行如下命令,切換到master分支 git checkout master切換完成之後,執行如下命令刪除掉遠端的dev分支 命令執行後,可以看到遠端分支已經被刪除掉了,但是本地分支還在,還需執行如下命令來刪除本地分...

Git刪除本地分支和遠端分支

git branch help git branch h usage git branch r a merged no merged or git branch l f or git branch r d d or git branch m m or git branch r a points at...

GIT刪除本地分支和遠端分支

刪除分支前,先簡單的說一下增加分支 git branch v 檢視當前分支的情況 git branch dev1 新建分支dev1,這個時候,只是本地新建了dev1的這個分支,遠端伺服器是沒有的,因為沒有對這個分支進行操作,並push 如下圖,建了兩個分支 dev1和dev2 一般現實開發中,開發用...