我們從progit 一書中可以看到:
遠端倉庫名字 「origin」 與分支名字 「master」 一樣,在 git 中並沒有任何特別的含義一樣。 同時「master」是當你執行git init時預設的起始分支名字,原因僅僅是它的廣泛使用,「origin」 是當你執行 git clone 時預設的遠端倉庫名字。 如果你執行 git clone -o booyah,那麼你預設的遠端分支名字將會是 booyah/master。
我們使用 git remote -v 或者 檢視.git/config 可以看到 origin 的含義。
當我們通過使用 git remote -v 命令的時候我們可以看到如下:
origin 這兩種形式。
但是origin 並不是指得是遠端的倉庫,而是指得是遠端倉庫在本地的乙個指標(這個指標有可能過時的)。當我們使用使用merge 的時候,我們進行合併的時候只是上一次fetch 從遠端拿到的版本。不是遠端倉庫的最新版本。
比如命令:
git merge origin master
指的就是將本地的遠端分支與本地的master 分支進行合併。
這裡 git merge origin master 可以和 git merge origin/master 進行對比
或者可以對比一下 git pull origin master 對比一下,你是不是會有新得體會。
我們或許可以再看一下 progit 上面對 遠端倉庫的最新的解釋:
遠端分支(remote branch)是對遠端倉庫中的分支的索引。它們是一些無法移動的本地分支;只有在 git 進行網路互動時才會更新。遠端分支就像是書籤,提醒著你上次連線遠端倉庫時上面各分支的位置。
其實:同時,git 會建立乙個屬於你自己的本地master 分支,它指向的是你剛剛從remote server傳到你本地的副本。隨著你不斷的改動檔案,git add, git commit,master的指向會自動移動,你也可以通過merge(fast forward)來移動master的指向。
我們通過 git branch -a 可以看到所有分支:
* master
remotes/origin/head -> origin/master
remotes/origin/dev
remotes/origin/master
可以發現:master 就是本地分支, origin/master 指得就是遠端分支。origin/master 指得是最近一次fetch 拿下來的最新版本。
上面這個圖就可以很好得講解,我們git 所合併得是commit. git merge origin master 指得是將本地庫所關聯的遠端倉庫對應的commit id 來和本地master進行合併。
而: 本地遠端倉庫記錄檔案是:.git\refs\remotes\origin\master 本地倉庫記錄的檔案是:.git\refs\heads\master
根據 sean-zou 的部落格我們可以知道:
1、git fetch只會將本地庫所關聯的遠端庫的commit id更新至最新
2、git pull會將本地庫更新至遠端庫的最新狀態
所以 git fetch 和 git merge 共同效果並不完全等同於 git pull
或者用英文來定義一下 fetch 和 pull 更為明白:
所以可以這麼 理解orgin 或者 orgin/master 這個只是遠端倉庫在本地倉庫的乙個指標。我們可以使用 git fetch 命令來進行更新。
所以在進行merge 的時候 不要忘了先進行git fetch 進行更新到最新的遠端倉庫。
我們借用ooba的乙個圖,他詳細得對比了pull 和 fetch,merge 。當然更為詳細的內容可以參考《progit》一書。
1. 2. 分支
3. 4. 《progit》- v2.1.8
git 的 origin 的含義
我們從progit 一書中可以看到 遠端倉庫名字 origin 與分支名字 master 一樣,在 git 中並沒有任何特別的含義一樣。同時 master 是當你執行git init時預設的起始分支名字,原因僅僅是它的廣泛使用,origin 是當你執行 git clone 時預設的遠端倉庫名字。如果...
git學習 關於origin和master
git的伺服器端 remote 端包含多個repository,每個repository可以理解為乙個專案。而每個repository下有多個branch,此處各個branch的意義,可以參考這篇文章。origin 就是指向某乙個repository的指標。伺服器端的 master 強調伺服器端是因...
git學習 關於origin和master
git的伺服器端 remote 端包含多個repository,每個repository可以理解為乙個專案。而每個repository下有多個branch。origin 就是指向某乙個repository的指標。伺服器端的 master 強調伺服器端是因為本地端也有master 就是指向某個repo...