0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于git的遠(yuǎn)程分支的詳細(xì)介紹

454398 ? 來(lái)源:itpub技術(shù)棧 ? 作者:chengycz ? 2020-10-11 10:03 ? 次閱讀

不知道大家有沒(méi)有經(jīng)歷過(guò),當(dāng)我們切換到了一個(gè)新的分支想要提交代碼的時(shí)候,總會(huì)遇到這樣的錯(cuò)誤。

我們把日志里的英文翻譯過(guò)來(lái)是說(shuō),我們當(dāng)前的分支沒(méi)有設(shè)置任何上游分支。然后git提示我們可以運(yùn)行下面這行代碼來(lái)設(shè)置遠(yuǎn)程的上游,這樣我們就可以push成功了。

當(dāng)然如果我們push的時(shí)候執(zhí)行的不是git push,而是后面再加上origin的話,就可以push成功了。比如這樣:

那么這是什么原因呢?這個(gè)origin分支又是什么意思呢?我們今天就來(lái)討論一下這個(gè)問(wèn)題。

遠(yuǎn)程分支

遠(yuǎn)程分支其實(shí)就是遠(yuǎn)程代碼倉(cāng)庫(kù)當(dāng)中的分支,比如我們的repo如果是存在github的,那么這個(gè)遠(yuǎn)程倉(cāng)庫(kù)就是github,如果是存在gitlab的,那么這個(gè)倉(cāng)庫(kù)就是gitlab,如果是其他的倉(cāng)庫(kù)也是一樣的道理。

當(dāng)我們?cè)谑褂胓it clone的時(shí)候,git會(huì)自動(dòng)地將這個(gè)遠(yuǎn)程的repo命名為origin,拉取它所有的數(shù)據(jù)之后,創(chuàng)建一個(gè)指向它master的指針,命名為origin/master,之后會(huì)在本地創(chuàng)建一個(gè)指向同樣位置的指針,命名為master,和遠(yuǎn)程的master作為區(qū)分。

也就是說(shuō),origin的含義指的是遠(yuǎn)程的倉(cāng)庫(kù)。它只是一個(gè)標(biāo)記,就和默認(rèn)分支叫做master一樣,本身并沒(méi)有特別的含義。如果我們?cè)敢庖部梢云鹌渌拿?,但是一般沒(méi)有人這么干。比如我們?cè)赾lone的時(shí)候可以添加一個(gè)參數(shù)-o給遠(yuǎn)程的repo起一個(gè)別名:

git clone -o chengzhi

這樣一來(lái),遠(yuǎn)程的這個(gè)repo就會(huì)被命名為chengzhi,代替原本的origin。但是這樣除了裝逼和增加成本之外,沒(méi)有任何用處,不推薦這么干。

操作命令

還記得我們之前在介紹git的時(shí)候曾經(jīng)說(shuō)過(guò)遠(yuǎn)程repo的作用,就是為了防止本地的代碼錯(cuò)亂,所以在遠(yuǎn)程留一份備份。這樣即使我們的代碼完蛋了,至少還可以找到備份。

所以遠(yuǎn)程的repo最大的作用就是保留備份,既然要保留備份,那么我們本地和遠(yuǎn)程的代碼交互肯定是免不了的。大家可能都大概知道git pull從遠(yuǎn)程拉取,git push推送到遠(yuǎn)程,但是對(duì)于這其中的細(xì)節(jié)可能不太清楚。之前沒(méi)有詳細(xì)介紹過(guò)遠(yuǎn)程分支,所以也沒(méi)辦法深入,我們今天剛好聊到這個(gè)話題,正好好好說(shuō)道說(shuō)道。

代碼拉取

我們先說(shuō)代碼拉取,說(shuō)到代碼拉取大家的第一反應(yīng)可能是git pull。但是其實(shí)git pull并不是嚴(yán)格意義上的代碼拉取命令,至少它還不是最細(xì)粒度,其實(shí)還有一個(gè)比git pull更加細(xì)粒度的操作。它就是——git fetch。

實(shí)際上git fetch才是真正的代碼拉取的操作,它的作用是將遠(yuǎn)程的改動(dòng)同步到本地。當(dāng)我們執(zhí)行g(shù)it fetch origin的時(shí)候,這里的origin指的是遠(yuǎn)程的名字,如果你有多個(gè)遠(yuǎn)程的話要指定的話需要加上,否則可以不寫(xiě)。它會(huì)把遠(yuǎn)程所有的改動(dòng)和分支都拉取到本地,命名為origin/xxx。origin的分支我們用git branch是看不到的,它只能看到本地的分支名,如果想要查看可以使用git branch -r。

當(dāng)我們使用git checkout切換過(guò)去的時(shí)候,可以不必加上origin,git會(huì)自動(dòng)生成一個(gè)本地的分支指針,也指向同樣的節(jié)點(diǎn)。它相當(dāng)于我們執(zhí)行了git checkout -b test origin/test。說(shuō)到這里就需要提一下git pull和git fetch的區(qū)別了,這兩者從表面上來(lái)看都是拉取遠(yuǎn)程的改動(dòng)。但是兩者針對(duì)的范圍不同,git fetch針對(duì)遠(yuǎn)程的所有改動(dòng),而git pull只針對(duì)當(dāng)前分支對(duì)應(yīng)的遠(yuǎn)程分支。另外git pull執(zhí)行之后會(huì)將遠(yuǎn)程的改動(dòng)merge到本地的分支,也就是說(shuō)它其實(shí)多了一步merge的操作。

代碼推送

說(shuō)到代碼推送回到了我們開(kāi)頭的那個(gè)問(wèn)題,什么情況下git push就可以,什么情況下需要加上origin呢?

這里涉及一個(gè)機(jī)制就是本地的分支是不會(huì)自動(dòng)和遠(yuǎn)程同步的,比如遠(yuǎn)程有人創(chuàng)建了一個(gè)test分支,我們拉取到本地會(huì)叫做origin/test。我們也可以自己創(chuàng)建一個(gè)test分支,和它井水不犯河水。這也是為了方便,如果直接用名稱映射的話,可能會(huì)有潛在的沖突。并且由于可能會(huì)存在多個(gè)遠(yuǎn)程repo,所以我們push的時(shí)候也會(huì)有多種選擇。

最完整的push命令是應(yīng)該寫(xiě)成這樣的:

git push origin test:cz/test

我們注意到這里用了一個(gè)奇怪的寫(xiě)法test:cz/test,它的意思是說(shuō)將本地的test分支推送到遠(yuǎn)程作為cz/test分支。如果我們想要本地的名稱和遠(yuǎn)程一樣,我們可以省略簡(jiǎn)寫(xiě)成:git push origin test。

如果我們?cè)O(shè)置過(guò)當(dāng)前test分支的上游是遠(yuǎn)程的test,或者本地的test就是從origin拷貝過(guò)來(lái)的,那么我們可以直接git push,它會(huì)自動(dòng)將本地的分支與遠(yuǎn)程關(guān)聯(lián)上,會(huì)方便很多。實(shí)際上我們大多數(shù)的push操作都是這么進(jìn)行的。將本地分支和遠(yuǎn)程建立映射可以使用這個(gè)命令:

git branch --set-upstream-to master origin/master

它表示的是將本地的master和遠(yuǎn)程的master進(jìn)行關(guān)聯(lián),設(shè)置過(guò)關(guān)聯(lián)之后我們只需要git push和git pull就可以更新和推送這個(gè)分支了,會(huì)方便很多。

關(guān)于遠(yuǎn)程分支還有一些內(nèi)容我們沒(méi)有涉及,比如如何跟蹤遠(yuǎn)程的分支,如何刪除等等。由于這些內(nèi)容幾乎用不到,我們即使強(qiáng)行記住了到時(shí)候也會(huì)忘記,所以就不多贅述了。
編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4671

    瀏覽量

    67770
  • Git
    Git
    +關(guān)注

    關(guān)注

    0

    文章

    195

    瀏覽量

    15688
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    《DNK210使用指南 -CanMV版 V1.0》第五章 編譯CanMV固件

    的使用介紹不是本教程文檔的重點(diǎn),請(qǐng)讀者在使用中遇到問(wèn)題時(shí),善用搜索引擎。 5.3 編譯CanMV源碼關(guān)于CanMV源碼的編譯,建議讀者先詳細(xì)閱讀CanMV倉(cāng)庫(kù)下的build.md文檔。編譯CanMV源碼前
    發(fā)表于 09-07 10:56

    Git發(fā)布新版本 修補(bǔ)五處安全漏洞 包含嚴(yán)重遠(yuǎn)程代碼執(zhí)行風(fēng)險(xiǎn)

    CVE-2024-32002漏洞的嚴(yán)重性在于,黑客可通過(guò)創(chuàng)建特定的Git倉(cāng)庫(kù)子模塊,誘騙Git將文件寫(xiě)入.git/目錄,而非子模塊的工作樹(shù)。如此一來(lái),攻擊者便能在克隆過(guò)程中植入惡意腳本,用戶幾乎無(wú)法察覺(jué)。
    的頭像 發(fā)表于 05-31 10:09 ?484次閱讀

    關(guān)于Profinet遠(yuǎn)程IO模塊的超詳細(xì)講解

    什么是Profinet遠(yuǎn)程IO模塊 Profinet是新一代基于工業(yè)以太網(wǎng)技術(shù)的自動(dòng)化總線標(biāo)準(zhǔn),它為自動(dòng)化通信領(lǐng)域提供了一個(gè)完整的網(wǎng)絡(luò)解決方案,用于連接遠(yuǎn)程輸入輸出(IO)設(shè)備到Profinet網(wǎng)絡(luò)
    的頭像 發(fā)表于 05-28 16:09 ?1050次閱讀
    <b class='flag-5'>關(guān)于</b>Profinet<b class='flag-5'>遠(yuǎn)程</b>IO模塊的超<b class='flag-5'>詳細(xì)</b>講解

    飛凌ElfBoard ELF 1板卡-ubuntu18.04 git安裝及基本使用

    git commit -m xxx(xxx代表備注信息) 6.查看提交記錄git log 7.查看分支git branch 添加新的分支
    發(fā)表于 03-21 16:23

    藍(lán)牙 | 軟件:Git管理高通的ChipCode項(xiàng)目

    最近發(fā)現(xiàn)大家在高通chipcode網(wǎng)站上下載不了代碼,小編一直使用git的方式獲取新版本代碼,沒(méi)有遇到什么阻礙。于是小編到新主機(jī)上嘗試下載代碼的壓縮包和git代碼,都遇到了問(wèn)題。由于壓縮包是高通自己
    的頭像 發(fā)表于 01-26 08:29 ?287次閱讀
    藍(lán)牙 | 軟件:<b class='flag-5'>Git</b>管理高通的ChipCode項(xiàng)目

    制造企業(yè)分支機(jī)構(gòu)如何高效互聯(lián)?

    ? 隨著制造企業(yè)業(yè)務(wù)的不斷擴(kuò)張,分布在不同地區(qū)的分支機(jī)構(gòu)逐漸成為提高市場(chǎng)覆蓋和降低生產(chǎn)成本的重要手段。然而,分支機(jī)構(gòu)的增多也帶來(lái)了管理和協(xié)調(diào)的挑戰(zhàn)。為了有效管理和協(xié)調(diào)各個(gè)分支機(jī)構(gòu)的運(yùn)營(yíng),建立一個(gè)高效
    的頭像 發(fā)表于 01-25 16:26 ?295次閱讀

    Git命令解決常見(jiàn)場(chǎng)景記錄

    本文主要?dú)w納一下git的學(xué)習(xí)記錄,在開(kāi)發(fā)期間發(fā)現(xiàn)了git在sourcetree的處理不是很好,對(duì)于多選文件的丟棄這點(diǎn)不是很方便,所以做一個(gè)記錄,由于項(xiàng)目中有新建的文件,所以被識(shí)別為未跟蹤的文件,但我
    的頭像 發(fā)表于 12-20 09:44 ?327次閱讀
    用<b class='flag-5'>Git</b>命令解決常見(jiàn)場(chǎng)景記錄

    git切換遠(yuǎn)程地址分支方式

    git remote set-url origin URL】 更換遠(yuǎn)程倉(cāng)庫(kù)地址,URL為新地址。
    的頭像 發(fā)表于 12-18 09:35 ?1772次閱讀

    Git命令之本地分支遠(yuǎn)程分支關(guān)聯(lián)和解除

    在實(shí)際的工作生活中,往往需要將本地的分支遠(yuǎn)程分支關(guān)聯(lián),這樣我們就可以使用git pull命令來(lái)更新拉取最新的代碼,并使用git push命
    的頭像 發(fā)表于 12-15 09:27 ?2190次閱讀
    <b class='flag-5'>Git</b>命令之本地<b class='flag-5'>分支</b>與<b class='flag-5'>遠(yuǎn)程</b><b class='flag-5'>分支</b>關(guān)聯(lián)和解除

    git命令的基本使用

    git config 第一次使用git或者剛安裝的git時(shí),使用此命令設(shè)置身份Name 和 Eamail 地址。并且每次提交時(shí)會(huì)使用此信息。
    的頭像 發(fā)表于 12-11 13:53 ?807次閱讀

    Git是如何存儲(chǔ)文件的?Git的工作原理解析

    我以為我已經(jīng)對(duì) Git 的工作方式了如指掌,但我以前從未真正涉及過(guò)打包文件,所以這次探索很有趣。我也很少思考當(dāng)我讓 git log 跟蹤一個(gè)文件的歷史時(shí),它實(shí)際上有多大的工作量,因此也很開(kāi)心能深入研究這個(gè)。
    的頭像 發(fā)表于 10-31 15:36 ?486次閱讀

    Git中最常用的命令介紹

    git add命令用于將修改的文件添加到下一次提交的暫存區(qū)。你可以指定要添加的文件git add命令用于將修改的文件添加到下一次提交的暫存區(qū)。你可以指定要添加的文件,例如git add file1.txt file2.txt。
    發(fā)表于 10-26 10:27 ?182次閱讀
    <b class='flag-5'>Git</b>中最常用的命令<b class='flag-5'>介紹</b>

    一文搞懂版本控制與Git

    在這個(gè)碼代碼的時(shí)代,我們?cè)絹?lái)越離不開(kāi)版本控制工具。而在眾多版本控制工具中,Git無(wú)疑是最為強(qiáng)大和流行的。
    的頭像 發(fā)表于 10-20 09:46 ?357次閱讀
    一文搞懂版本控制與<b class='flag-5'>Git</b>

    Git常用的超級(jí)實(shí)用命令

    的一些Git工作流。 1 Git 常用的超級(jí)實(shí)用命令 1.1 與倉(cāng)庫(kù)相關(guān)的操作 克隆代碼倉(cāng)庫(kù)到本地,開(kāi)發(fā)必用 git clone 查看本地倉(cāng)庫(kù)配置了那些對(duì)應(yīng)的遠(yuǎn)程倉(cāng)庫(kù)。
    的頭像 發(fā)表于 10-09 17:19 ?1063次閱讀
    <b class='flag-5'>Git</b>常用的超級(jí)實(shí)用命令

    如何在 Git 中恢復(fù)隱藏的修改記錄

    git stash 和 git stash pop 這樣的命令是用來(lái)擱置(藏匿)和恢復(fù)我們工作目錄中的變化的。在本教程中,我們將學(xué)習(xí)如何在 Git 中恢復(fù)隱藏的修改記錄。 在工作目錄中存儲(chǔ)更改
    的頭像 發(fā)表于 10-09 14:09 ?813次閱讀