git fetch底层运行原理解析

2019-08-14 git 2180

git fetch 底层运行原理解析

*重要的概念 FETCH_HEAD *

FETCH_HEAD指的是: 某个 branch 在服务器上的最新状态, 每一个执行过 fetch 操作的项目都会存在一个 FETCH_HEAD 列表, 这个列表保存在 .git/FETCH_HEAD 文件中,其中每一行对应于远程服务器的一个分支。当前分支指向的 FETCH_HEAD ,就是这个文件第一行对应的那个分支。

一般来说, 存在两种情况:

  • 如果没有显式的指定远程分支, 则远程分支的master将作为默认的FETCH_HEAD.

  • 如果指定了远程分支, 就将这个远程分支作为FETCH_HEAD.

功能说明

从远程获取最新版本到本地,不会自动merge

使用说明

常见的git fetch 使用方式包含以下三种:

1.* git fetch 无参 和 git fetch origin *

这一步其实是执行了两个关键操作:

  • 创建并更新所有远程分支的本地远程分支.

  • 设定当前分支的FETCH_HEAD为远程服务器的master分支 (上面说的第一种情况)

需要注意的是: 和push不同, fetch会自动获取远程`新加入'的分支.

2.* git fetch origin branch1 *

设定当前分支的 FETCH_HEAD 为远程服务器的 branch1 分支.

注意: 在这种情况下, 不会在本地创建本地远程分支, 这是因为: 这个操作是 git pull origin branch1 的第一步, 而对应的pull操作,并不会在本地创建新的branch.

一个附加效果是:

这个命令可以用来测试远程主机的远程分支branch1是否存在, 如果存在, 返回0, 如果不存在, 返回128, 抛出一个异常.

3.* git fetch origin branch1:branch2git fetch origin :branch2 *

  • 首先执行上面的fetch操作

  • 使用远程branch1分支在本地创建branch2(但不会切换到该分支), 如果本地不存在branch2分支, 则会自动创建一个新的branch2分支, 如果本地存在branch2分支, 并且是 fast forward,则自动合并两个分支, 否则, 会阻止以上操作。

git fetch origin :branch2 等价于 git fetch origin master:branch2

参考文章,来源

0