遠程倉庫名字 “origin” 與分支名字 “master” 一樣,在 Git 中並沒有任何特別的含義一樣。 同時“master”是當你運行git init時默認的起始分支名字,原因僅僅是它的廣泛使用,“origin” 是當你運行 git clone 時默認的遠程倉庫名字。 如果你運行 git clone -o 遠程倉庫別名 遠程地址,那么你默認的遠程分支名字將會是 booyah/master。
我們使用 git remote -v 或者 查看.git/config 可以看到 origin 的含義。
當我們通過使用 git remote -v 命令的時候我們可以看到如下:
origin https://github.com/yaowenxu/yaowenxu.github.io.git (fetch)
origin https://github.com/yaowenxu/yaowenxu.github.io.git (push)
origin 這兩種形式。
origin 並不是指得是遠程的倉庫,而是指得是遠程倉庫在本地的一個指針(這個指針有可能過時的)。當我們使用使用merge 的時候,我們進行合並的時候只是上一次fetch 從遠程拿到的版本。不是遠程倉庫的最新版本。
比如命令:
git merge origin master
指的就是將本地的遠端分支與本地的master 分支進行合並。
在clone完成之后,Git 會自動為你將此遠程倉庫命名為origin(origin只相當於一個別名,運行git remote –v或者查看.git/config可以看到origin的含義),並下載其中所有的數據,建立一個指向它的master 分支的指針,我們用(遠程倉庫名)/(分支名) 這樣的形式表示遠程分支,所以origin/master指向的是一個remote branch(從那個branch我們clone數據到本地)
我們通過 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