Git遠程倉庫的使用

目錄

1. git clone 復制遠程倉庫
2. git fetch 更新遠程分支
    2.1拉取指定的遠程倉庫分支
    2.2 git fetch origin <source>:<destination> 指定分支進行操作
3. git pull 來拉取遠程最新的分支寒跳,并與本地的分支合并(組合命令)
    3.1 git pull 相當于fetch和merge
    3.2 git pull --rebase 相當于fetch和rebase
    3.3 上文git fetch能用的git fetch origin <source>:<destination>可以同規(guī)律適用于git pull
4. git push 的操作同時會更新遠程倉庫分支和本地倉庫的遠程分支
    4.1 git push <remote> <place>將指定本地分支提交到遠程倉庫的同名分支
    4.2 git push origin <source>:<destination> 將指定本地分支提交到遠程倉庫的不同名分支
5. 關聯(lián)遠程的分支
6. 簡單案例

1.git clone 復制遠程倉庫

你可能注意到的第一個事就是在我們的本地倉庫多了一個名為 o/master 的分支, 這種類型的分支就叫遠程分支绣的。由于遠程分支的特性導致其擁有一些特殊屬性。
順帶一提浅悉,git clone會為遠程倉庫中每個分支在本地倉庫創(chuàng)建一個遠程分支和一個關聯(lián)的分支屹蚊。(詳情請看5.關聯(lián)遠程的分支)

遠程分支反映了遠程倉庫(在你上次和它通信時)的狀態(tài)讹开。這會有助于你理解本地的工作與公共工作的差別 —— 這是你與別人分享工作成果前至關重要的一步.

遠程分支有一個命名規(guī)范 —— 它們的格式是:
<remote name>/<branch name>
因此绳瘟,如果你看到一個名為 o/master 的分支,那么這個分支就叫 master而叼,遠程倉庫的名稱就是 o身笤。
當你用 git clone 某個倉庫時,Git 已經(jīng)會幫你把遠程倉庫的名稱設置為 origin 了葵陵。(這邊的網(wǎng)站為了方便液荸,設置成了o)

image.png

遠程分支有一個特別的屬性,在你檢出時自動進入分離 HEAD 狀態(tài)脱篙。Git 這么做是出于不能直接在這些分支上進行操作的原因, 你必須在別的地方完成你的工作, (更新了遠程分支之后)再用遠程分享你的工作成果娇钱。
o/master 只有在遠程倉庫中相應的分支更新了以后才會更新。

image.png

2. git fetch 更新遠程分支

git fetch 實際上將本地倉庫中的遠程分支更新成了遠程倉庫相應分支最新的狀態(tài)绊困。
git fetch 完成了僅有的但是很重要的兩步:
從遠程倉庫下載本地倉庫中缺失的提交記錄
更新遠程分支指針(如 o/master)
遠程分支反映了遠程倉庫在你最后一次與它通信時的狀態(tài)文搂,git fetch 就是你與遠程倉庫通信的方式了!

特別注意:如果git fetch 后面沒有任何參數(shù)秤朗,會下載所有的提交記錄到各個遠程分支(如果你遠程倉庫里有多個分支的話煤蹭,各個分支都會下載)

image.png

git fetch 并不會改變你本地倉庫的狀態(tài)。它不會更新你的 master 分支取视,也不會修改你磁盤上的文件硝皂。
所以, 你可以將 git fetch 的理解為單純的下載操作。

2.1拉取指定的遠程倉庫分支

git fetch origin foo


image.png

2.2 git fetch origin <source>:<destination> 指定分支進行操作

因為要拉取作谭,這邊的source是遠程倉庫分支(注意區(qū)別本地倉庫的遠程分支)稽物,destination是本地倉庫的分支

將遠程倉庫分支foo的上一個節(jié)點拉取到本地倉庫的bar分支,如果bar分支不存在折欠,會創(chuàng)建一個
git fetch origin foo~1:bar

image.png

在本地創(chuàng)建一個新的分支贝或,不建議用,不如直接用 git branch bar 或者git checkout -b bar
git fetch origin :bar

image.png

3.git pull 來拉取遠程最新的分支锐秦,并與本地的分支合并(組合命令)

上面我們提到咪奖,git fetch只改變了本地倉庫的遠程分支,那么如果想要 master與o/master合并农猬,怎么辦呢赡艰?
又或者,遠程倉庫的master分支已經(jīng)超過了本地遠程分支(o/master)的進度斤葱,這個時候我們執(zhí)行git push會失敗慷垮,因為本地沒有拉取遠程倉庫最新的更新。
我們需要先fetch來揍堕。然后又因為在本地的master上有提交料身,我們需要將這個master和o/master合并。這樣我們才會被允許提交

3.1 git pull 相當于fetch和merge

git pull 相當于下面這兩個操作
git fetch
git merge o/master


image.png

3.2 git pull --rebase 相當于fetch和rebase

image.png

3.3 上文git fetch能用的git fetch origin <source>:<destination>可以同規(guī)律適用于git pull

image.png

舉個例子:


image.png

4.git push 的操作同時會更新遠程倉庫分支和本地倉庫的遠程分支

image.png
image.png

4.1 git push <remote> <place>將指定本地分支提交到遠程倉庫的同名分支

git push <remote> <place>
比如:git push origin master
把這個命令翻譯過來就是:
切到本地倉庫中的“master”分支衩茸,獲取所有的提交芹血,再到遠程倉庫“origin”中找到“master”分支,將遠程倉庫中沒有的提交記錄都添加上去楞慈,搞定之后告訴我幔烛。

image.png

4.2git push origin <source>:<destination> 將指定本地分支提交到遠程倉庫的不同名分支

git push origin <source>:<destination>
如果destination指定的遠程倉庫分支不存在,會創(chuàng)建一個囊蓝。

如果source為空饿悬,形如git push origin :foo
會刪除遠程倉庫、本地遠程分支聚霜、本地倉庫的foo分支(全滅)

把foo分支的上一個提交push到遠程倉庫的master分支上
git push origin foo^:master


image.png

5. 關聯(lián)遠程的分支

Git 好像知道 master 與 o/master 是相關的狡恬。當然這些分支的名字是相似的,可能會讓你覺得是依此將遠程分支 master 和本地的 master 分支進行了關聯(lián)蝎宇。這種關聯(lián)在以下兩種情況下可以清楚地得到展示:

pull 操作時, 提交記錄會被先下載到 o/master 上弟劲,之后再合并到本地的 master 分支。隱含的合并目標由這個關聯(lián)確定的姥芥。
push 操作時, 我們把工作從 master 推到遠程倉庫中的 master 分支(同時會更新遠程分支 o/master) 兔乞。這個推送的目的地也是由這種關聯(lián)確定的!

image.png

可以用以下命令進行關聯(lián):
git branch -u o/master foo (這個foo必須已經(jīng)存在)
git checkout -b foo o/master (如果這個foo不存在凉唐,會創(chuàng)建一個)
可以用以下命令查看關聯(lián)關系:
git branch -vv

6.簡單案例:

如果你是在一個大的合作團隊中工作, 很可能是master被鎖定了, 遠程服務器拒絕直接推送(push)提交到master, 因為策略配置要求 pull requests 來提交更新.
不允許提交master分支报嵌,需要提交其他命名的分支。
你應該按照流程,新建一個分支feature, 推送到遠程服務器. 然后reset你的master分支和遠程服務器保持一致, 否則下次你pull并且他人的提交和你沖突的時候就會有問題.

git reset --hard o/master (master與遠程服務器保持一致)
git checkout -b feature c2 (創(chuàng)建一個新的分支feature熊榛,指向c2)
git push origin feature (把feature提交)

下圖左邊為最終結果锚国,右邊為初始狀態(tài)


image.png
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市玄坦,隨后出現(xiàn)的幾起案子血筑,更是在濱河造成了極大的恐慌,老刑警劉巖煎楣,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件豺总,死亡現(xiàn)場離奇詭異,居然都是意外死亡择懂,警方通過查閱死者的電腦和手機喻喳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來困曙,“玉大人表伦,你說我怎么就攤上這事谦去。” “怎么了蹦哼?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵鳄哭,是天一觀的道長。 經(jīng)常有香客問我纲熏,道長妆丘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任局劲,我火速辦了婚禮勺拣,結果婚禮上,老公的妹妹穿的比我還像新娘鱼填。我一直安慰自己药有,他們只是感情好,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布剔氏。 她就那樣靜靜地躺著塑猖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谈跛。 梳的紋絲不亂的頭發(fā)上埂陆,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天垮卓,我揣著相機與錄音衬潦,去河邊找鬼境钟。 笑死,一個胖子當著我的面吹牛阻桅,可吹牛的內(nèi)容都是我干的凉倚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼嫂沉,長吁一口氣:“原來是場噩夢啊……” “哼稽寒!你這毒婦竟也來了?” 一聲冷哼從身側響起趟章,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤杏糙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蚓土,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宏侍,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年蜀漆,在試婚紗的時候發(fā)現(xiàn)自己被綠了谅河。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖绷耍,靈堂內(nèi)的尸體忽然破棺而出吐限,到底是詐尸還是另有隱情,我是刑警寧澤锨天,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布毯盈,位于F島的核電站剃毒,受9級特大地震影響病袄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赘阀,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一益缠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧基公,春花似錦幅慌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至酸休,卻和暖如春骂租,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背斑司。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工渗饮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宿刮。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓互站,卻偏偏與公主長得像,于是被迫代替她去往敵國和親僵缺。 傳聞我的和親對象是個殘疾皇子胡桃,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359