Git命令大全

前言

Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)剥汤。
工作原理 / 流程:

image.png

Workspace:工作區(qū)
Index / Stage:暫存區(qū)
Repository:倉庫區(qū)(或本地倉庫)
Remote:遠(yuǎn)程倉庫

SVN與Git的最主要的區(qū)別臼勉?
SVN是集中式版本控制系統(tǒng)蛉谜,版本庫是集中放在中央服務(wù)器的,而干活的時(shí)候育韩,用的都是自己的電腦畦攘,所以首先要從中央服務(wù)器哪里得到最新的版本,然后干活错妖,干完后,需要把自己做完的活推送到中央服務(wù)器疚沐。集中式版本控制系統(tǒng)是必須聯(lián)網(wǎng)才能工作暂氯,如果在局域網(wǎng)還可以,帶寬夠大亮蛔,速度夠快痴施,如果在互聯(lián)網(wǎng)下,如果網(wǎng)速慢的話究流,就納悶了辣吃。

Git是分布式版本控制系統(tǒng),那么它就沒有中央服務(wù)器的芬探,每個(gè)人的電腦就是一個(gè)完整的版本庫神得,這樣,工作的時(shí)候就不需要聯(lián)網(wǎng)了偷仿,因?yàn)榘姹径际窃谧约旱碾娔X上哩簿。既然每個(gè)人的電腦都有一個(gè)完整的版本庫,那多個(gè)人如何協(xié)作呢炎疆?比如說自己在電腦上改了文件A卡骂,其他人也在電腦上改了文件A,這時(shí)形入,你們兩之間只需把各自的修改推送給對(duì)方全跨,就可以互相看到對(duì)方的修改了

一,基礎(chǔ)篇

1亿遂,提交代碼

$ git add .       //添加分支代碼到暫存區(qū)域
$ git commit -m "fix :-----"         //提交分支代碼---填寫提交信息

2,創(chuàng)建分支

$ git branch newImage       // 創(chuàng)建新分支 newImage
$ git checkout newImage  或  git switch newImage      //切換到本地newImage分支
$ git checkout -b newImage     創(chuàng)建新分支并切換到新分支

3浓若,合并分支

$ git merge bugFix         //合并bugFix 分支到當(dāng)前分支   
$ git rebase bugFix         //合并bugFix 分支到當(dāng)前分支

區(qū)別:
rebase 一個(gè)兩個(gè)分支 就各位了一個(gè)分支,test合并前所有的 patch也就是commit消失了
merge 則還是兩個(gè)分支蛇数,只不過在merge后這個(gè)點(diǎn)交匯
圖解:

image.png
image.png

建議使用merge合并代碼

二挪钓,高級(jí)篇

1,分離HEAD
HEAD 是一個(gè)對(duì)當(dāng)前檢出記錄的符號(hào)引用 —— 也就是指向你正在其基礎(chǔ)上進(jìn)行工作的提交記錄耳舅。HEAD 總是指向當(dāng)前分支上最近一次提交記錄碌上。大多數(shù)修改提交樹的 Git 命令都是從改變 HEAD 的指向開始的倚评。HEAD 通常情況下是指向分支名的。
將其總結(jié)為以下幾種情況:

·如果臨時(shí)想基于某個(gè)commit做變更馏予,試試新方案是否可行天梧,就可以采用分離頭指針的方式。測(cè)試后發(fā)現(xiàn)新方案不成熟霞丧,直接reset回其他分支即可呢岗,省去了建、刪分支的麻煩蛹尝,git會(huì)忽略管理這個(gè)沒有分支commit后豫。

·進(jìn)行到某個(gè)commit,試試新方案突那,為該commit建立新的branch挫酿,可以進(jìn)行特性開發(fā)。

·分離頭指針對(duì)應(yīng)的commit陨收,你如果認(rèn)為有用需要保留饭豹,那就用新分支把它保留。

·如果當(dāng)下無master分支务漩,可以在分離頭指針狀態(tài)下拄衰,git checkout -b master HEAD

2,相對(duì)引用
通過哈希值指定提交記錄很不方便饵骨,所以 Git 引入了相對(duì)引用翘悉。使用相對(duì)引用的話,你就可以從一個(gè)易于記憶的地方(比如bugFix 分支或 HEAD)開始計(jì)算居触。
下面介紹兩個(gè)簡(jiǎn)單的用法:

· 使用 ^ 向上移動(dòng) 1 個(gè)提交記錄

· 使用 ~<num> 向上移動(dòng)多個(gè)提交記錄妖混,如~3

<1>.操作符 (^)
把這個(gè)符號(hào)加在引用名稱的后面,表示讓 Git 尋找指定提交記錄的父提交轮洋。
所以 master^ 相當(dāng)于“master 的父節(jié)點(diǎn)”制市。
master^^ 是 master 的第二個(gè)父節(jié)點(diǎn)
演示操作:切換到 master 的父節(jié)點(diǎn)

$ git checkout master^
image.png

也可以將 HEAD 作為相對(duì)引用的參照。下面咱們就用 HEAD 在提交樹中向上移動(dòng)幾次弊予。
我們可以一直使用 HEAD^ 向上移動(dòng)祥楣。

$ git checkout C3
$ git checkout HEAD^
$ git checkout HEAD^
$ git checkout HEAD^
image.png

<2>.操作符(~)
如果想在提交樹中向上移動(dòng)很多步的話,敲那么多 ^ 貌似也挺煩人的汉柒,Git 當(dāng)然也考慮到了這一點(diǎn)误褪,于是又引入了操作符 ~。
該操作符后面可以跟一個(gè)數(shù)字(可選碾褂,不跟數(shù)字時(shí)與 ^ 相同兽间,向上移動(dòng)一次),指定向上移動(dòng)多少次正塌。下面實(shí)際操作
用 ~<num> 一次后退四步嘀略,這種方法比前面的簡(jiǎn)單了不少恤溶。

$ git checkout HEAD~4
image.png

3,撤銷變更
主要有兩種方法用來撤銷變更 —— 一是 git reset,還有就是 git revert屎鳍。

·git reset 通過把分支記錄回退幾個(gè)提交記錄來實(shí)現(xiàn)撤銷改動(dòng)宏娄。你可以將這想象成“改寫歷史”问裕。git reset 向上移動(dòng)分支逮壁,原來指向的提交記錄就跟從來沒有提交過一樣。

$ git reset HEAD~1
image.png

Git 把 master 分支移回到 C1粮宛;現(xiàn)在我們的本地代碼庫根本就不知道有C2 這個(gè)提交了窥淆。
(譯者注:在reset后, C2 所做的變更還在巍杈,但是處于未加入暫存區(qū)狀態(tài)忧饭。)

·雖然在你的本地分支中使用 git reset 很方便,但是這種“改寫歷史”的方法對(duì)大家一起使用的遠(yuǎn)程分支是無效的哦筷畦!
為了撤銷更改并分享給別人词裤,我們需要使用 git revert。

$  git revert HEAD
image.png

在我們要撤銷的提交記錄后面居然多了一個(gè)新提交鳖宾!這是因?yàn)樾绿峤挥涗?C2' 引入了更改 —— 這些更改剛好是用來撤銷 C2 這個(gè)提交的吼砂。也就是說 C2' 的狀態(tài)與 C1 是相同的。
revert 之后就可以把你的更改推送到遠(yuǎn)程倉庫與別人分享啦鼎文。

三渔肩,移動(dòng)提交記錄

1,git cherry-pick <提交號(hào)>...
如果你想將一些提交復(fù)制到當(dāng)前所在的位置(HEAD)下面的話拇惋, Cherry-pick 是最直接的方式了周偎。

$  git cherry-pick c2 c4
image.png

2,交互式的 rebase
當(dāng)你知道你所需要的提交記錄(并且還知道這些提交記錄的哈希值)時(shí), 用 cherry-pick 再好不過了 —— 沒有比這更簡(jiǎn)單的方式了撑帖。

但是如果你不清楚你想要的提交記錄的哈希值呢? 幸好 Git 幫你想到了這一點(diǎn), 我們可以利用交互式的 rebase —— 如果你想從一系列的提交記錄中找到想要的記錄, 這就是最好的方法了
交互式 rebase 指的是使用帶參數(shù) --interactive 的 rebase 命令, 簡(jiǎn)寫為 -i
如果你在命令后增加了這個(gè)選項(xiàng), Git 會(huì)打開一個(gè) UI 界面并列出將要被復(fù)制到目標(biāo)分支的備選提交記錄蓉坎,它還會(huì)顯示每個(gè)提交記錄的哈希值和提交說明,提交說明有助于你理解這個(gè)提交進(jìn)行了哪些更改胡嘿。
在實(shí)際使用時(shí)蛉艾,所謂的 UI 窗口一般會(huì)在文本編輯器 —— 如 Vim —— 中打開一個(gè)文件。
當(dāng) rebase UI界面打開時(shí), 你能做3件事:
調(diào)整提交記錄的順序(通過鼠標(biāo)拖放來完成)
刪除你不想要的提交(通過切換 pick 的狀態(tài)來完成灶平,關(guān)閉就意味著你不想要這個(gè)提交記錄)
合并提交伺通。 遺憾的是由于某種邏輯的原因,我們的課程不支持此功能逢享,因此我不會(huì)詳細(xì)介紹這個(gè)操作罐监。簡(jiǎn)而言之,它允許你把多個(gè)提交記錄合并成一個(gè)瞒爬。
實(shí)例操作:

image.png
image.png
image.png

要通過本關(guān), 做一次交互式的 rebase弓柱,整理成目標(biāo)窗口中的提交順序沟堡。 記住,你隨時(shí)都可以用 undo矢空、reset 修正錯(cuò)誤航罗,這是不會(huì)記入步數(shù)的 ??

image.png
$ git rebase -i HEAD~4    //刪除c2,調(diào)整順序c3,c5,c4
image.png

四,雜項(xiàng)

1, 只取一個(gè)提交記錄

$  git cherry-pick c2   // 只需要其中一個(gè)代碼提交記錄

2屁药,Git tag
git tag可以(在某種程度上 —— 因?yàn)闃?biāo)簽可以被刪除后重新在另外一個(gè)位置創(chuàng)建同名的標(biāo)簽)永久地將某個(gè)特定的提交命名為里程碑粥血,然后就可以像分支一樣引用了。
更難得的是酿箭,它們并不會(huì)隨著新的提交而移動(dòng)复亏。你也不能切換到某個(gè)標(biāo)簽上面進(jìn)行修改提交,它就像是提交樹上的一個(gè)錨點(diǎn)缭嫡,標(biāo)識(shí)了某個(gè)特定的位置缔御。

$ git tag v1 c1
image.png

我們將這個(gè)標(biāo)簽命名為 v1,并且明確地讓它指向提交記錄 C1妇蛀,如果你不指定提交記錄耕突,Git 會(huì)用 HEAD 所指向的位置。
3,Git Describe
由于標(biāo)簽在代碼庫中起著“錨點(diǎn)”的作用评架,Git 還為此專門設(shè)計(jì)了一個(gè)命令用來描述離你最近的錨點(diǎn)(也就是標(biāo)簽)眷茁,它就是 git describe!
Git Describe 能幫你在提交歷史中移動(dòng)了多次以后找到方向古程;當(dāng)你用 git bisect(一個(gè)查找產(chǎn)生 Bug 的提交記錄的指令)找到某個(gè)提交記錄時(shí)蔼卡,或者是當(dāng)你坐在你那剛剛度假回來的同事的電腦前時(shí), 可能會(huì)用到這個(gè)命令挣磨。

git describe 的語法是:
git describe <ref>
<ref> 可以是任何能被 Git 識(shí)別成提交記錄的引用雇逞,如果你沒有指定的話,Git 會(huì)以你目前所檢出的位置(HEAD)茁裙。
它輸出的結(jié)果是這樣的:
<tag>_<numCommits>_g<hash>
tag 表示的是離 ref 最近的標(biāo)簽塘砸, numCommits 是表示這個(gè) ref 與 tag 相差有多少個(gè)提交記錄, hash 表示的是你所給定的 ref 所表示的提交記錄哈希值的前幾位晤锥。
當(dāng) ref 提交記錄上有某個(gè)標(biāo)簽時(shí)掉蔬,則只輸出標(biāo)簽名稱

image.png

五,高級(jí)話題

1矾瘾,多分支 rebase
咱們把這些分支 rebase 到 main 上女轿,希望得到有序的提交歷史,也就是我們最終的結(jié)果應(yīng)該是 C6' 在 C7' 上面壕翩, C5' 在 C6' 上面蛉迹,依此類推

image.png

2,兩個(gè)父節(jié)點(diǎn)

image.png
image.png
image.png
image.png

3 放妈,糾纏不清的分支
現(xiàn)在我們的 main 分支是比 one北救、two 和 three 要多幾個(gè)提交荐操。出于某種原因,我們需要把 main 分支上最近的幾次提交做不同的調(diào)整后珍策,分別添加到各個(gè)的分支上托启。
one 需要重新排序并刪除 C5,two 僅需要重排排序攘宙,而 three 只需要提交一次屯耸。

image.png
image.png

六,Push & Pull —— Git 遠(yuǎn)程倉庫模聋!

1肩民,git init & git clone
Git 使用 git init 命令來初始化一個(gè) Git 倉庫,Git 的很多命令都需要在 Git 的倉庫中運(yùn)行链方,所以 git init 是使用 Git 的第一個(gè)命令。
在執(zhí)行完成 git init 命令后灶搜,Git 倉庫會(huì)生成一個(gè) .git 目錄祟蚀,該目錄包含了資源的所有元數(shù)據(jù),其他的項(xiàng)目目錄保持不變割卖。

遠(yuǎn)程倉庫并不復(fù)雜, 在如今的云計(jì)算盛行的世界很容易把遠(yuǎn)程倉庫想象成一個(gè)富有魔力的東西, 但實(shí)際上它們只是你的倉庫在另個(gè)一臺(tái)計(jì)算機(jī)上的拷貝前酿。你可以通過因特網(wǎng)與這臺(tái)計(jì)算機(jī)通信 —— 也就是增加或是獲取提交記錄

話雖如此, 遠(yuǎn)程倉庫卻有一系列強(qiáng)大的特性

首先也是最重要的的點(diǎn), 遠(yuǎn)程倉庫是一個(gè)強(qiáng)大的備份。本地倉庫也有恢復(fù)文件到指定版本的能力, 但所有的信息都是保存在本地的鹏溯。有了遠(yuǎn)程倉庫以后罢维,即使丟失了本地所有數(shù)據(jù), 你仍可以通過遠(yuǎn)程倉庫拿回你丟失的數(shù)據(jù)。

還有就是, 遠(yuǎn)程讓代碼社交化了! 既然你的項(xiàng)目被托管到別的地方了, 你的朋友可以更容易地為你的項(xiàng)目做貢獻(xiàn)(或者拉取最新的變更)

image.png

2丙挽,遠(yuǎn)程分支

image.png
image.png
image.png
image.png
image.png

3肺孵,Git Fetch
Git 遠(yuǎn)程倉庫相當(dāng)?shù)牟僮鲗?shí)際可以歸納為兩點(diǎn):向遠(yuǎn)程倉庫傳輸數(shù)據(jù)以及從遠(yuǎn)程倉庫獲取數(shù)據(jù)。既然我們能與遠(yuǎn)程倉庫同步颜阐,那么就可以分享任何能被 Git 管理的更新(因此可以分享代碼平窘、文件、想法凳怨、情書等等)瑰艘。

git fetch 完成了僅有的但是很重要的兩步:

<1>從遠(yuǎn)程倉庫下載本地倉庫中缺失的提交記錄
<2>更新遠(yuǎn)程分支指針(如 o/main)

git fetch 實(shí)際上將本地倉庫中的遠(yuǎn)程分支更新成了遠(yuǎn)程倉庫相應(yīng)分支最新的狀態(tài)。

如果你還記得上一節(jié)課程中我們說過的肤舞,遠(yuǎn)程分支反映了遠(yuǎn)程倉庫在你最后一次與它通信時(shí)的狀態(tài)紫新,git fetch 就是你與遠(yuǎn)程倉庫通信的方式了!希望我說的夠明白了李剖,你已經(jīng)了解 git fetch 與遠(yuǎn)程分支之間的關(guān)系了吧芒率。

git fetch 通常通過互聯(lián)網(wǎng)(使用 http:// 或 git:// 協(xié)議) 與遠(yuǎn)程倉庫通信。

git fetch 并不會(huì)改變你本地倉庫的狀態(tài)杖爽。它不會(huì)更新你的 main 分支敲董,也不會(huì)修改你磁盤上的文件紫皇。

4,Git Pull
既然我們已經(jīng)知道了如何用 git fetch 獲取遠(yuǎn)程的數(shù)據(jù), 現(xiàn)在我們學(xué)習(xí)如何將這些變化更新到我們的工作當(dāng)中腋寨。

其實(shí)有很多方法的 —— 當(dāng)遠(yuǎn)程分支中有新的提交時(shí)聪铺,你可以像合并本地分支那樣來合并遠(yuǎn)程分支。也就是說就是你可以執(zhí)行以下命令:

git cherry-pick o/main
git rebase o/main
git merge o/main
等等
實(shí)際上萄窜,由于先抓取更新再合并到本地分支這個(gè)流程很常用铃剔,因此 Git 提供了一個(gè)專門的命令來完成這兩個(gè)操作。它就是我們要講的 git pull查刻。

git pull 就是 git fetch 和 git merge 的縮寫键兜!

5,fakeTeamwork

image.png
image.png

6穗泵,Git Push
git push 負(fù)責(zé)將你的變更上傳到指定的遠(yuǎn)程倉庫普气,并在遠(yuǎn)程倉庫上合并你的新提交記錄。

注意 —— git push 不帶任何參數(shù)時(shí)的行為與 Git 的一個(gè)名為 push.default 的配置有關(guān)佃延。它的默認(rèn)值取決于你正使用的 Git 的版本现诀,但是在教程中我們使用的是 upstream。 這沒什么太大的影響履肃,但是在你的項(xiàng)目中進(jìn)行推送之前仔沿,最好檢查一下這個(gè)配置。

7尺棋,偏離的工作
多個(gè)小伙伴同時(shí)開發(fā)封锉,因代碼提交順序?qū)е耮it push失敗

image.png
image.png

還有其它的方法可以在遠(yuǎn)程倉庫變更了以后更新我的工作嗎? 當(dāng)然有,我們還可以使用 merge

盡管 git merge 不會(huì)移動(dòng)你的工作(它會(huì)創(chuàng)建新的合并提交)膘螟,但是它會(huì)告訴 Git 你已經(jīng)合并了遠(yuǎn)程倉庫的所有變更成福。這是因?yàn)檫h(yuǎn)程分支現(xiàn)在是你本地分支的祖先,也就是說你的提交已經(jīng)包含了遠(yuǎn)程分支的所有變化萍鲸。

image.png

很好闷叉!但是要敲那么多命令,有沒有更簡(jiǎn)單一點(diǎn)的脊阴?
當(dāng)然 —— 前面已經(jīng)介紹過 git pull 就是 fetch 和 merge 的簡(jiǎn)寫握侧,類似的 git pull --rebase 就是 fetch 和 rebase 的簡(jiǎn)寫!

image.png
image.png

8嘿期,遠(yuǎn)程服務(wù)器拒絕!(Remote Rejected)
如果你是在一個(gè)大的合作團(tuán)隊(duì)中工作, 很可能是main被鎖定了, 需要一些Pull Request流程來合并修改品擎。如果你直接提交(commit)到本地main, 然后試圖推送(push)修改, 你將會(huì)收到這樣類似的信息:
! [遠(yuǎn)程服務(wù)器拒絕] main -> main (TF402455: 不允許推送(push)這個(gè)分支; 你必須使用pull request來更新這個(gè)分支.)

為什么會(huì)被拒絕?
遠(yuǎn)程服務(wù)器拒絕直接推送(push)提交到main, 因?yàn)椴呗耘渲靡?pull requests 來提交更新.
你應(yīng)該按照流程,新建一個(gè)分支, 推送(push)這個(gè)分支并申請(qǐng)pull request,但是你忘記并直接提交給了main.現(xiàn)在你卡住并且無法推送你的更新.

解決辦法
新建一個(gè)分支feature, 推送到遠(yuǎn)程服務(wù)器. 然后reset你的main分支和遠(yuǎn)程服務(wù)器保持一致, 否則下次你pull并且他人的提交和你沖突的時(shí)候就會(huì)有問題.

image.png

七,關(guān)于 origin 和它的周邊 —— Git 遠(yuǎn)程倉庫高級(jí)操作

1备徐,合并特性分支

image.png

實(shí)例:
這里共有三個(gè)特性分支 —— side1 side2 和 side3
我需要將這三分支按順序推送到遠(yuǎn)程倉庫
因?yàn)檫h(yuǎn)程倉庫已經(jīng)被更新過了萄传,所以我們還要把那些工作合并過來
圖示:

image.png
image.png

2,合并遠(yuǎn)程倉庫
rebase 的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):Rebase 使你的提交樹變得很干凈, 所有的提交都在一條線上
缺點(diǎn):Rebase 修改了提交樹的歷史

比如, 提交 C1 可以被 rebase 到 C3 之后。這看起來 C1 中的工作是在 C3 之后進(jìn)行的秀菱,但實(shí)際上是在 C3 之前振诬。
一些開發(fā)人員喜歡保留提交歷史,因此更偏愛 merge衍菱。而其他人(比如我自己)可能更喜歡干凈的提交樹赶么,于是偏愛 rebase。

3脊串,遠(yuǎn)程跟蹤分支
pull 操作時(shí), 提交記錄會(huì)被先下載到 o/main 上辫呻,之后再合并到本地的 main 分支。隱含的合并目標(biāo)由這個(gè)關(guān)聯(lián)確定的琼锋。
push 操作時(shí), 我們把工作從 main 推到遠(yuǎn)程倉庫中的 main 分支(同時(shí)會(huì)更新遠(yuǎn)程分支 o/main) 放闺。這個(gè)推送的目的地也是由這種關(guān)聯(lián)確定的!

image.png

你可以讓任意分支跟蹤 o/main, 然后該分支會(huì)像 main 分支一樣得到隱含的 push 目的地以及 merge 的目標(biāo)缕坎。 這意味著你可以在分支 totallyNotMain 上執(zhí)行 git push怖侦,將工作推送到遠(yuǎn)程倉庫的 main 分支上。
有兩種方法設(shè)置這個(gè)屬性:
第一種就是通過遠(yuǎn)程分支檢出一個(gè)新的分支念赶,執(zhí)行:
git checkout -b totallyNotMain o/main
就可以創(chuàng)建一個(gè)名為 totallyNotMain 的分支础钠,它跟蹤遠(yuǎn)程分支 o/main

image.png
image.png

另一種設(shè)置遠(yuǎn)程追蹤分支的方法就是使用:git branch -u 命令,執(zhí)行:
git branch -u o/main foo
這樣 foo 就會(huì)跟蹤 o/main 了叉谜。如果當(dāng)前就在 foo 分支上, 還可以省略 foo:
git branch -u o/main

image.png

4,Git Push 的參數(shù)

$ git push <remote> <place>
image.png
image.png
image.png

如果來源和去向分支的名稱不同呢踩萎?比如你想把本地的 foo 分支推送到遠(yuǎn)程倉庫中的 bar 分支

image.png
image.png
image.png

5停局,Git fetch 的參數(shù)
<place> 參數(shù)
如果你像如下命令這樣為 git fetch 設(shè)置 的話:

$ git fetch origin foo

Git 會(huì)到遠(yuǎn)程倉庫的 foo 分支上,然后獲取所有本地不存在的提交香府,放到本地的 o/foo 上董栽。

image.png

你可能會(huì)好奇 —— 為何 Git 會(huì)將新提交放到 o/foo 而不是放到我本地的 foo 分支呢?之前不是說這樣的 參數(shù)就是同時(shí)應(yīng)用于本地和遠(yuǎn)程的位置嗎企孩?

好吧, 本例中 Git 做了一些特殊處理锭碳,因?yàn)槟憧赡茉?foo 分支上的工作還未完成,你也不想弄亂它勿璃。還記得在 git fetch 課程里我們講到的嗎 —— 它不會(huì)更新你的本地的非遠(yuǎn)程分支, 只是下載提交記錄(這樣, 你就可以對(duì)遠(yuǎn)程分支進(jìn)行檢查或者合并了)擒抛。

“如果我們指定 <source>:<destination> 會(huì)發(fā)生什么呢?”

如果你覺得直接更新本地分支很爽补疑,那你就用冒號(hào)分隔的 refspec 吧歧沪。不過,你不能在當(dāng)前檢出的分支上干這個(gè)事莲组,但是其它分支是可以的诊胞。

這里有一點(diǎn)是需要注意的 —— source 現(xiàn)在指的是遠(yuǎn)程倉庫中的位置,而 <destination> 才是要放置提交的本地倉庫的位置锹杈。它與 git push 剛好相反撵孤,這是可以講的通的迈着,因?yàn)槲覀冊(cè)谕喾吹姆较騻魉蛿?shù)據(jù)。

image.png
image.png
image.png

6邪码,沒有source的source
Git 有兩種關(guān)于 <source> 的用法是比較詭異的裕菠,即你可以在 git push 或 git fetch 時(shí)不指定任何 source,方法就是僅保留冒號(hào)和 destination 部分霞扬,source 部分留空糕韧。

$ git push origin :side
$ git fetch origin :bugFix
image.png
image.png

7,Git pull 參數(shù)

$ git pull origin foo    // 相當(dāng)于
$ git fetch origin foo; 
$ git merge o/foo

$ git pull origin bar~1:bugFix      // 相當(dāng)于
$ git fetch origin bar~1:bugFix; 
$ git merge bugFix

看到了? git pull 實(shí)際上就是 fetch + merge 的縮寫, git pull 唯一關(guān)注的是提交最終合并到哪里(也就是為 git fetch 所提供的 destination 參數(shù))

image.png
image.png
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末喻圃,一起剝皮案震驚了整個(gè)濱河市萤彩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌斧拍,老刑警劉巖雀扶,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異肆汹,居然都是意外死亡愚墓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門昂勉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浪册,“玉大人,你說我怎么就攤上這事岗照〈逑螅” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵攒至,是天一觀的道長(zhǎng)厚者。 經(jīng)常有香客問我,道長(zhǎng)迫吐,這世上最難降的妖魔是什么库菲? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮志膀,結(jié)果婚禮上熙宇,老公的妹妹穿的比我還像新娘。我一直安慰自己梧却,他們只是感情好奇颠,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著放航,像睡著了一般烈拒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天荆几,我揣著相機(jī)與錄音吓妆,去河邊找鬼。 笑死吨铸,一個(gè)胖子當(dāng)著我的面吹牛行拢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播诞吱,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼舟奠,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了房维?” 一聲冷哼從身側(cè)響起沼瘫,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎咙俩,沒想到半個(gè)月后耿戚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阿趁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年膜蛔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脖阵。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡皂股,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出命黔,到底是詐尸還是另有隱情屑墨,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布纷铣,位于F島的核電站,受9級(jí)特大地震影響战转,放射性物質(zhì)發(fā)生泄漏搜立。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一槐秧、第九天 我趴在偏房一處隱蔽的房頂上張望啄踊。 院中可真熱鬧,春花似錦刁标、人聲如沸颠通。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽顿锰。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間硼控,已是汗流浹背刘陶。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留牢撼,地道東北人匙隔。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像熏版,于是被迫代替她去往敵國(guó)和親纷责。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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

  • Add & Commit git init 初始化一個(gè) Git 倉庫(repository)撼短,即把當(dāng)前所在目錄變成...
    冬絮閱讀 4,793評(píng)論 0 8
  • 一再膳、 Git 命令初識(shí) 在正式介紹Git命令之前,先介紹一下Git 的基本命令和操作阔加,對(duì)Git命令有一個(gè)總體的認(rèn)識(shí)...
    Eenmaal_7a01閱讀 396評(píng)論 0 0
  • 今天是周二胜榔,坐標(biāo)北京~ 天氣 霧霾胳喷。又是快要一天了。感覺時(shí)間過得好快夭织! Git常用命令 查看吭露、添加、提交尊惰、刪除讲竿、找...
    嗯_(tái)新閱讀 440評(píng)論 0 14
  • 1.基本命令 (1) .git隱藏目錄用于區(qū)分普通目錄還是git目錄 (2)origin是默認(rèn)主機(jī)名(遠(yuǎn)程倉庫),...
    CurryCoder閱讀 478評(píng)論 0 2
  • Git命令 # git知識(shí)點(diǎn) ##用命令行創(chuàng)建一個(gè)新的存儲(chǔ)庫 echo "# Documents" >> READ...
    呼呼哥閱讀 388評(píng)論 0 0