Git Remotes
本地端的 git 有能力可以回復文件到前一個狀態 (你知道的),但是全部的資訊還是儲存在本地端。如果你在其它的電腦上面有你的 git repository 的副本,則你可以在資料不小心遺失的時候進行救援備份。 更重要的是, remote 讓大家一起來 coding!現在你的 project 放在 remote 上面,你的朋友可以很容易地對你的 project 做出貢獻(或者是 pull 你最後的修改) 。
我們現在想要學習針對 remote 的指令,我們需要一個指令去建立環境,git clone 就是我們需要的指令。技術上來說, git clone 表示你想要把遠端的 repository 複製一份下來放在本地端( 例如從 github 複製)。
你首先看到的是在你的本地端(local repository)出現了一個新的 branch 叫作 o/main,這種型態的 branch 叫作 remote branch (遠端分支),因為特殊的需求,因此 remote branch 有特殊的性質。
remote branch 反應了 remote repository 的狀態(因為你最後接觸的是這些 remote repository),最重要的是,在你想要分享你的 commit 給其他人時,你必須知道你現在的 commit 跟 remote repository 有哪些不同,而 remote branch 的狀態就是在告訴你這些資訊。
remote branch 有特別的特性,當你移動到 remote branch 時,你就進入到分離 HEAD 的狀態,git 這樣做的原因是告訴你不能夠直接影響這些 branch。你必須要在其它的 branch 工作,並且分享到 remote (分享之後,你的 remote branch 就會被更新)。
什麼是 o/?
你也許會對於 remote branch 前面的 o/ 感到困惑,喔!remote branch 也(需要) 一個命名法則,或者是一般表示 remote branch 的格式。
- <remote 名稱>/<branch 名稱>
因此,當你看到一個 branch 叫做 o/main,就表示這個 branch 叫做 main,而且這個 remote 的名稱叫作 o。
很多程式設計師實際上會把他們的 remote 命名為 origin,而不是 o,這在 git 是很常見的事情,因為當你使用 git clone 時,git 會自動把你的 remote 命名為 origin。
git fetch
那如何從 remote repository 來 fetch (抓取)資料? 這個指令叫作 git fetch。
看以下的例子:
在這裡我們有一個新增了兩個 commit 的 remote repository, 而且我們的 local repository 並沒有包含這兩個 commit。
輸入指令:
git fetch
commit C2 以及 C3 已經被下載到我們的 local repository,而且我們的 remote branch o/main 也更新了。
git fetch 只有執行了兩個主要步驟,包含:
- 下載 remote 有的 commit,但是在我們的 local repository 是沒有該 commit。
- 更新我們 remote branch 所指向的地方(例如, o/main)
然而,git fetch 並不會影響到在你的 local repository 中的 main branch,他並不會將你的 main branch 更新到最新的狀態。
這個觀念很重要,因為很多程式設計師以為 git fetch 可以讓他們在 local repository 上面的工作跟 remote repository 的工作可以同步。它是會下載同步所需的資料,但是不會更新任何的檔案,我們會在後面的教學中提到如何做到這件事情。:D
因此,你可以把 git fetch 想成是在下載資料。