這是git詳解的第二篇,最近這個加班有點虛,所以文章也寫的比較懶了,一到加班不得已,保溫杯里泡枸杞啊,不扯了,今天我們來看看git的第二篇
這篇內容主要是git的一些遠程命令
關於遠程我們要先理解一個概念,遠程倉庫
遠程倉庫
遠程倉庫並不復雜, 在如今的雲計算盛行的世界很容易把遠程倉庫想象成一個富有魔力的東西, 但實際上它們只是你的倉庫在另個一台計算機上的拷貝。你可以通過因特網與這台計算機通信 —— 也就是增加或是獲取提交記錄
話雖如此, 遠程倉庫卻有一系列強大的特性
-
首先也是最重要的的點, 遠程倉庫是一個強大的備份。本地倉庫也有恢復文件到指定版本的能力, 但所有的信息都是保存在本地的。有了遠程倉庫以后,即使丟失了本地所有數據, 你仍可以通過遠程倉庫拿回你丟失的數據。
-
還有就是, 遠程讓代碼社交化了! 既然你的項目被托管到別的地方了, 你的朋友可以更容易地為你的項目做貢獻(或者拉取最新的變更)
現在用網站來對遠程倉庫進行可視化操作變得越發流行了(像 Github 或 Phabricator), 但遠程倉庫永遠是這些工具的頂梁柱, 因此理解其概念非常的重要!
git clone
遠程操作的第一個命令,即配置使用遠程倉庫環境的命令,git clone
命令作用是在本地創建一個遠程倉庫的拷貝
執行git clone 后
OK,現在我們有了一個自己項目的遠程倉庫
既然現在有了遠程倉庫,現在我們來進行下一步,這個時候我們又要談一個概念了
遠程分支
既然你已經看過 git clone
命令了,咱們深入地看一下發生了什么。
你可能注意到的第一個事就是在我們的本地倉庫多了一個名為 o/master
的分支, 這種類型的分支就叫遠程分支。由於遠程分支的特性導致其擁有一些特殊屬性。
遠程分支反映了遠程倉庫(在你上次和它通信時)的狀態。這會有助於你理解本地的工作與公共工作的差別 —— 這是你與別人分享工作成果前至關重要的一步.
遠程分支有一個特別的屬性,在你檢出時自動進入分離 HEAD 狀態。Git 這么做是出於不能直接在這些分支上進行操作的原因, 你必須在別的地方完成你的工作, (更新了遠程分支之后)再用遠程分享你的工作成果。
關於第一步驟操作你可能還有一個疑問
為什么有 o/
?
你可能想問這些遠程分支的前面的 o/
是什么意思呢?好吧, 遠程分支有一個命名規范 —— 它們的格式是:
<remote name>/<branch name>
因此,如果你看到一個名為 o/master
的分支,那么這個分支就叫 master
,遠程倉庫的名稱就是 o
。
大多數的開發人員會將它們主要的遠程倉庫命名為 origin
,並不是 o
。這是因為當你用 git clone
某個倉庫時,Git 已經幫你把遠程倉庫的名稱設置為 origin
了
不過 origin
對於我們的 UI 來說太長了,因此不得不使用簡寫 o
:) 但是要記住, 當你使用真正的 Git 時, 你的遠程倉庫默認為 origin
!
如果檢出遠程分支會怎么樣呢?
執行命令 git checkout o/master
git commit
正如你所見,Git 變成了分離 HEAD 狀態,當添加新的提交時 o/master
也不會更新。這是因為 o/master
只有在遠程倉庫中相應的分支更新了以后才會更新。
Git Fetch
Git 遠程倉庫相當的操作實際可以歸納為兩點:向遠程倉庫傳輸數據以及從遠程倉庫獲取數據。既然我們能與遠程倉庫同步,那么就可以分享任何能被 Git 管理的更新(因此可以分享代碼、文件、想法、情書等等)。
現在我們來看看如何從遠程倉庫獲取數據 —— 命令如其名,它就是 git fetch
。
你會看到當我們從遠程倉庫獲取數據時, 遠程分支也會更新以反映最新的遠程倉庫。
在解釋 git fetch
前,我們先看看實例。這里我們有一個遠程倉庫, 它有兩個我們本地倉庫中沒有的提交。
執行 git fetch
就是這樣了! C2
,C3
被下載到了本地倉庫,同時遠程分支 o/master
也被更新,反映到了這一變化
注意:
git fetch
並不會改變你本地倉庫的狀態。它不會更新你的 master
分支,也不會修改你磁盤上的文件。
理解這一點很重要,因為許多開發人員誤以為執行了 git fetch
以后,他們本地倉庫就與遠程倉庫同步了。它可能已經將進行這一操作所需的所有數據都下載了下來,但是並沒有修改你本地的文件
所以, 你可以將 git fetch
的理解為單純的下載操作