git版本控制-遠(yuǎn)程操作

前言

Git是目前最流行的版本管理系統(tǒng)福也,學(xué)會(huì)Git幾乎成了開(kāi)發(fā)者的必備技能工育。

Git有很多優(yōu)勢(shì),其中之一就是遠(yuǎn)程操作非常簡(jiǎn)便鹃愤。本文詳細(xì)介紹5個(gè)Git命令簇搅,它們的概念和用法,理解了這些內(nèi)容昼浦,你就會(huì)完全掌握Git遠(yuǎn)程操作馍资。

作者:Simon0903

鏈接:http://www.reibang.com/u/2b4bc3b5e6fc

來(lái)源:簡(jiǎn)書(shū)

簡(jiǎn)書(shū)著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處关噪。

· git clone? #從遠(yuǎn)程主機(jī)copy一個(gè)版本庫(kù)下來(lái)本地

· git remote # 管理遠(yuǎn)程主機(jī)名??

· git fetch # 取回主機(jī)更新版本到本地

· git pull # 取回遠(yuǎn)程主機(jī)下某分支的更新版本(與本地指定分支合并)

· git push #本地更新版本推送到遠(yuǎn)程主機(jī)

·

一、git clone

遠(yuǎn)程操作的第一步乌妙,通常是從遠(yuǎn)程主機(jī)克隆一個(gè)版本庫(kù)使兔,這時(shí)就要用到git clone命令。

$ git clone <版本庫(kù)的網(wǎng)址>

比如藤韵,克隆jQuery的版本庫(kù)

$ git clone https://github.com/jquery/jquery.git

該命令會(huì)在本地主機(jī)生成一個(gè)目錄虐沥,與遠(yuǎn)程主機(jī)的版本庫(kù)同名。如果要指定不同的目錄名泽艘,可以將目錄名作為git clone命令的第二個(gè)參數(shù)欲险。

$ git clone <版本庫(kù)的網(wǎng)址> <本地目錄名>

git clone支持多種協(xié)議,除了HTTP(s)以外匹涮,還支持SSH天试、Git、本地文件協(xié)議等然低,下面是一些例子喜每。

$ git clone http[s]://example.com/path/to/repo.git/

$ git clone ssh://example.com/path/to/repo.git/

$ git clone git://example.com/path/to/repo.git/

$ git clone /opt/git/project.git

$ git clone file:///opt/git/project.git

$ git clone ftp[s]://example.com/path/to/repo.git/

$ git clone rsync://example.com/path/to/repo.git/

SSH協(xié)議還有另一種寫法。

$ git clone [user@]example.com:path/to/repo.git/

通常來(lái)說(shuō)雳攘,Git協(xié)議下載速度最快带兜,SSH協(xié)議用于需要用戶認(rèn)證的場(chǎng)合。各種協(xié)議優(yōu)劣的詳細(xì)討論請(qǐng)參考官方文檔吨灭。

二刚照、git remote

為了便于管理,Git要求每個(gè)遠(yuǎn)程主機(jī)都必須指定一個(gè)主機(jī)名喧兄。git remote命令就用于管理主機(jī)名无畔。

不帶選項(xiàng)的時(shí)候,git remote命令列出所有遠(yuǎn)程主機(jī)繁莹。

$ git remote

origin

使用-v選項(xiàng)檩互,可以參看遠(yuǎn)程主機(jī)的網(wǎng)址。

$ git remote -v

origin git@github.com:jquery/jquery.git (fetch)

origin git@github.com:jquery/jquery.git (push)

上面命令表示咨演,當(dāng)前只有一臺(tái)遠(yuǎn)程主機(jī)闸昨,叫做origin,以及它的網(wǎng)址。

克隆版本庫(kù)的時(shí)候饵较,所使用的遠(yuǎn)程主機(jī)自動(dòng)被Git命名為origin拍嵌。如果想用其他的主機(jī)名,需要用git clone命令的-o選項(xiàng)指定循诉。

$ git clone -o jQuery https://github.com/jquery/jquery.git

$ git remote jQuery

上面命令表示横辆,克隆的時(shí)候,指定遠(yuǎn)程主機(jī)叫做jQuery茄猫。

git remote show命令加上主機(jī)名狈蚤,可以查看該主機(jī)的詳細(xì)信息。

$ git remote show <主機(jī)名>

git remote add命令用于添加遠(yuǎn)程主機(jī)划纽。

$ git remote add <主機(jī)名> <網(wǎng)址>

git remote rm命令用于刪除遠(yuǎn)程主機(jī)脆侮。

$ git remote rm <主機(jī)名>

git remote rename命令用于遠(yuǎn)程主機(jī)的改名。

$ git remote rename <原主機(jī)名> <新主機(jī)名>

三勇劣、git fetch

一旦遠(yuǎn)程主機(jī)的版本庫(kù)有了更新(Git術(shù)語(yǔ)叫做commit)靖避,需要將這些更新取回本地,這時(shí)就要用到git fetch命令比默。

$ git fetch <遠(yuǎn)程主機(jī)名>

上面命令將某個(gè)遠(yuǎn)程主機(jī)的更新幻捏,全部取回本地。

git fetch命令通常用來(lái)查看其他人的進(jìn)程命咐,因?yàn)樗』氐拇a對(duì)你本地的開(kāi)發(fā)代碼沒(méi)有影響篡九。

默認(rèn)情況下,git fetch取回所有分支(branch)的更新侈百。如果只想取回特定分支的更新瓮下,可以指定分支名。

$ git fetch <遠(yuǎn)程主機(jī)名> <分支名>

比如钝域,取回origin主機(jī)的master分支讽坏。

$ git fetch origin master

所取回的更新,在本地主機(jī)上要用"遠(yuǎn)程主機(jī)名/分支名"的形式讀取例证。比如origin主機(jī)的master路呜,就要用origin/master讀取。

git branch命令的-r選項(xiàng)织咧,可以用來(lái)查看遠(yuǎn)程分支胀葱,-a選項(xiàng)查看所有分支。

$ git branch -r origin/master

$ git branch -a * master remotes/origin/master

上面命令表示笙蒙,本地主機(jī)的當(dāng)前分支是master抵屿,遠(yuǎn)程分支是origin/master。

取回遠(yuǎn)程主機(jī)的更新以后捅位,可以在它的基礎(chǔ)上轧葛,使用git checkout命令創(chuàng)建一個(gè)新的分支搂抒。

$ git checkout -b newBrach origin/master

上面命令表示,在origin/master的基礎(chǔ)上尿扯,創(chuàng)建一個(gè)新分支求晶。

此外,也可以使用git merge命令或者git rebase命令衷笋,在本地分支上合并遠(yuǎn)程分支芳杏。

$ git merge origin/master

# 或者

$ git rebase origin/master

上面命令表示在當(dāng)前分支上,合并origin/master辟宗。

四爵赵、git pull

git pull命令的作用是,取回遠(yuǎn)程主機(jī)某個(gè)分支的更新泊脐,再與本地的指定分支合并亚再。它的完整格式稍稍有點(diǎn)復(fù)雜。

$ git pull <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>:<本地分支名>

比如晨抡,取回origin主機(jī)的next分支,與本地的master分支合并则剃,需要寫成下面這樣耘柱。

$ git pull origin next:master

如果遠(yuǎn)程分支是與當(dāng)前分支合并,則冒號(hào)后面的部分可以省略棍现。

$ git pull origin next

上面命令表示调煎,取回origin/next分支,再與當(dāng)前分支合并己肮。實(shí)質(zhì)上士袄,這等同于先做git fetch,再做git merge谎僻。

在某些場(chǎng)合娄柳,Git會(huì)自動(dòng)在本地分支與遠(yuǎn)程分支之間,建立一種追蹤關(guān)系(tracking)艘绍。比如赤拒,在git clone的時(shí)候,所有本地分支默認(rèn)與遠(yuǎn)程主機(jī)的同名分支诱鞠,建立追蹤關(guān)系挎挖,也就是說(shuō),本地的master分支自動(dòng)"追蹤"origin/master分支航夺。

Git也允許手動(dòng)建立追蹤關(guān)系蕉朵。

git branch --set-upstream master origin/next

上面命令指定master分支追蹤origin/next分支。

如果當(dāng)前分支與遠(yuǎn)程分支存在追蹤關(guān)系阳掐,git pull就可以省略遠(yuǎn)程分支名始衅。

$ git pull origin

上面命令表示冷蚂,本地的當(dāng)前分支自動(dòng)與對(duì)應(yīng)的origin主機(jī)"追蹤分支"(remote-tracking branch)進(jìn)行合并。

如果當(dāng)前分支只有一個(gè)追蹤分支觅闽,連遠(yuǎn)程主機(jī)名都可以省略帝雇。

$ git pull

上面命令表示,當(dāng)前分支自動(dòng)與唯一一個(gè)追蹤分支進(jìn)行合并蛉拙。

如果合并需要采用rebase模式尸闸,可以使用--rebase選項(xiàng)。

$ git pull --rebase <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>:<本地分支名>

如果遠(yuǎn)程主機(jī)刪除了某個(gè)分支孕锄,默認(rèn)情況下吮廉,git pull 不會(huì)在拉取遠(yuǎn)程分支的時(shí)候,刪除對(duì)應(yīng)的本地分支畸肆。這是為了防止宦芦,由于其他人操作了遠(yuǎn)程主機(jī),導(dǎo)致git pull不知不覺(jué)刪除了本地分支轴脐。

但是调卑,你可以改變這個(gè)行為,加上參數(shù) -p 就會(huì)在本地刪除遠(yuǎn)程已經(jīng)刪除的分支大咱。

$ git pull -p

# 等同于下面的命令

$ git fetch --prune origin

$ git fetch -p

五恬涧、git push

git push命令用于將本地分支的更新,推送到遠(yuǎn)程主機(jī)碴巾。它的格式與git pull命令相仿溯捆。

$ git push <遠(yuǎn)程主機(jī)名> <本地分支名>:<遠(yuǎn)程分支名>

注意,分支推送順序的寫法是<來(lái)源地>:<目的地>厦瓢,所以git pull是<遠(yuǎn)程分支>:<本地分支>提揍,而git push是<本地分支>:<遠(yuǎn)程分支>。

如果省略遠(yuǎn)程分支名煮仇,則表示將本地分支推送與之存在"追蹤關(guān)系"的遠(yuǎn)程分支(通常兩者同名)劳跃,如果該遠(yuǎn)程分支不存在,則會(huì)被新建欺抗。

$ git push origin master

上面命令表示售碳,將本地的master分支推送到origin主機(jī)的master分支。如果后者不存在绞呈,則會(huì)被新建贸人。

如果省略本地分支名,則表示刪除指定的遠(yuǎn)程分支佃声,因?yàn)檫@等同于推送一個(gè)空的本地分支到遠(yuǎn)程分支艺智。

$ git push origin :master

# 等同于

$ git push origin --delete master

上面命令表示刪除origin主機(jī)的master分支。

如果當(dāng)前分支與遠(yuǎn)程分支之間存在追蹤關(guān)系圾亏,則本地分支和遠(yuǎn)程分支都可以省略十拣。

$ git push origin

上面命令表示封拧,將當(dāng)前分支推送到origin主機(jī)的對(duì)應(yīng)分支。

如果當(dāng)前分支只有一個(gè)追蹤分支夭问,那么主機(jī)名都可以省略泽西。

$ git push

如果當(dāng)前分支與多個(gè)主機(jī)存在追蹤關(guān)系,則可以使用-u選項(xiàng)指定一個(gè)默認(rèn)主機(jī)缰趋,這樣后面就可以不加任何參數(shù)使用git push捧杉。

$ git push -u origin master

上面命令將本地的master分支推送到origin主機(jī),同時(shí)指定origin為默認(rèn)主機(jī)秘血,后面就可以不加任何參數(shù)使用git push了味抖。

不帶任何參數(shù)的git push,默認(rèn)只推送當(dāng)前分支灰粮,這叫做simple方式仔涩。此外,還有一種matching方式粘舟,會(huì)推送所有有對(duì)應(yīng)的遠(yuǎn)程分支的本地分支熔脂。Git 2.0版本之前,默認(rèn)采用matching方法柑肴,現(xiàn)在改為默認(rèn)采用simple方式锤悄。如果要修改這個(gè)設(shè)置,可以采用git config命令嘉抒。

$ git config --global push.default matching

# 或者

$ git config --global push.default simple

還有一種情況,就是不管是否存在對(duì)應(yīng)的遠(yuǎn)程分支袍暴,將本地的所有分支都推送到遠(yuǎn)程主機(jī)些侍,這時(shí)需要使用--all選項(xiàng)。

上面命令表示政模,將所有本地分支都推送到origin主機(jī)岗宣。

如果遠(yuǎn)程主機(jī)的版本比本地版本更新,推送時(shí)Git會(huì)報(bào)錯(cuò)淋样,要求先在本地做git pull合并差異耗式,然后再推送到遠(yuǎn)程主機(jī)。這時(shí)趁猴,如果你一定要推送刊咳,可以使用--force選項(xiàng)。

$ git push --force origin

上面命令使用--force選項(xiàng)儡司,結(jié)果導(dǎo)致遠(yuǎn)程主機(jī)上更新的版本被覆蓋娱挨。除非你很確定要這樣做,否則應(yīng)該盡量避免使用--force選項(xiàng)捕犬。

最后跷坝,git push不會(huì)推送標(biāo)(tag),除非使用--tags選項(xiàng)酵镜。

$git push origin --tags

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市柴钻,隨后出現(xiàn)的幾起案子淮韭,更是在濱河造成了極大的恐慌,老刑警劉巖贴届,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件靠粪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡粱腻,警方通過(guò)查閱死者的電腦和手機(jī)庇配,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)绍些,“玉大人捞慌,你說(shuō)我怎么就攤上這事〖砼” “怎么了啸澡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)氮帐。 經(jīng)常有香客問(wèn)我嗅虏,道長(zhǎng),這世上最難降的妖魔是什么上沐? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任皮服,我火速辦了婚禮,結(jié)果婚禮上参咙,老公的妹妹穿的比我還像新娘龄广。我一直安慰自己,他們只是感情好蕴侧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布择同。 她就那樣靜靜地躺著,像睡著了一般净宵。 火紅的嫁衣襯著肌膚如雪敲才。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天择葡,我揣著相機(jī)與錄音紧武,去河邊找鬼。 笑死敏储,一個(gè)胖子當(dāng)著我的面吹牛脏里,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播虹曙,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼迫横,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼番舆!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起矾踱,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤恨狈,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后呛讲,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體禾怠,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年贝搁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吗氏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡雷逆,死狀恐怖弦讽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情膀哲,我是刑警寧澤往产,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站某宪,受9級(jí)特大地震影響仿村,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜兴喂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一蔼囊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧衣迷,春花似錦压真、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)岳悟。三九已至佃迄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贵少,已是汗流浹背呵俏。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留滔灶,地道東北人普碎。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像录平,于是被迫代替她去往敵國(guó)和親麻车。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缀皱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Git有很多優(yōu)勢(shì),其中之一就是遠(yuǎn)程操作非常簡(jiǎn)便动猬。本文詳細(xì)介紹5個(gè)Git命令啤斗,它們的概念和用法,理解了這些內(nèi)容赁咙,你就...
    bondPang閱讀 1,328評(píng)論 0 6
  • 作者:阮一峰 日期:2014年6月12日 Git是目前最流行的版本管理系統(tǒng)钮莲,學(xué)會(huì)Git幾乎成了開(kāi)發(fā)者的必備技能。 ...
    Maggie編程去閱讀 448評(píng)論 0 1
  • 我對(duì)祭祀的抗拒,應(yīng)該是從爺爺離世的時(shí)候開(kāi)始凤覆。 十五歲链瓦,第一次經(jīng)歷生死離別,對(duì)我來(lái)說(shuō)真正給我沉重打擊的不是爺爺?shù)碾x去...
    茉逸閱讀 312評(píng)論 1 0
  • 高度臨在閱讀 240評(píng)論 0 0
  • 西湖煙雨泛舟行叛赚,水朦朧澡绩,霧朦朧,佳人亭亭玉立中俺附,垂柳又依依肥卡,景色亦朦朧,世間多少美好事事镣?蘇堤岸上舞春風(fēng)步鉴,曲苑荷風(fēng)催...
    江帆9527閱讀 232評(píng)論 0 0