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

posted @ 2022-03-27 13:32  飞龙在生  阅读(2804)  评论(0编辑  收藏  举报