git 的 origin 的含義


遠程倉庫名字 “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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM