fetch
在拉取代码过程中首先检查本地仓库和远程仓库的差异,检查哪些不存在于本地仓库,然后将这些变动的提交拉取到本地,但是,它是把远程提交拉取到本地仓库,而不是本地工作目录,它不会自行将这些新数据合并到当前工作目录中,我们需要继续执行 git merge 才会把这些变动合并到当前工作目录。
实例
下载远程仓库的所有变动
- git fetch [remote]
选项
- --all
-
获取所有。
- -a
--append -
将获取的引用的引用名称和对象名称追加到 .
git/FETCH_HEAD
的现有内容中。如果没有此选项,.git/FETCH_HEAD
中的旧数据将被覆盖。 - --atomic
-
使用一个原子事务来更新本地索引。
- --depth=<depth>
-
限制从每个远程分支历史记录的顶端提取指定数量的提交。如果使用
--depth=<depth>
选项将其提取到由git clone
创建的 shallow 存储库中,请加深历史记录或将历史记录缩短为指定的提交次数。未获取深化提交的标签。 - --deepen=<depth>
-
与
--depth
类似,只是指定了从当前浅层边界提交的次数,而不是从每个远程分支历史记录的顶端提交的次数。 - --shallow-since=<date>
-
加深或缩短浅存储库的历史记录,以包括
之后的所有可到达的提交。 - --shallow-exclude=<revision>
-
加深或缩短浅层仓库的历史记录,以排除从指定的远程分支或标签中可以到达的提交。这个选项可以指定多次。
- --unshallow
-
如果源存储库是完整的,则将浅层存储库转换为完整的存储库,消除浅层存储库带来的所有限制。
-
如果源库较浅,则尽可能多地获取,使当前库与源库具有相同的历史。
- --update-shallow
-
默认情况下,当从浅存储库中
git fetch
,git fetch拒绝需要更新.git/shallow的引用。此选项更新.git/shallow并接受此类引用。 - --negotiation-tip=<commit|glob>
-
默认情况下,Git 会向服务器报告从所有本地 refs 中可以到达的提交,以找到共同的提交,从而减少将要接收的 packfile 的大小。如果指定了这个选项,Git 将只报告从给定的提示中可以到达的提交。当用户知道哪个本地 ref 可能与上游 ref 有共同的提交时,这对加快获取速度很有用。
-
这个选项可以指定多个,如果是这样的话,Git会报告从任何一个给定的提交到达的提交。
-
这个选项的参数可以是 ref 名称的 glob,也可以是 ref,或者是提交的 SHA-1(可能是缩写)。指定 glob 相当于多次指定这个选项,每个匹配的 ref 名称都有一个。
- --negotiate-only
-
不要从服务器获取任何东西,而是打印提供的
--negotiation-tip=*
参数的祖先,我们与服务器有共同之处。 -
这与
--recurse-submodules=[yes|on-demand]
不兼容。在内部,这用于实现push.negotiate
选项 - --dry-run
-
在不做任何改变的情况下,显示出会怎么做。
- --[no-]write-fetch-head
-
将获取到的
FETCH_HEAD
文件中的远程引用的列表直接写在$GIT_DIR
。这是默认值。从命令行传递--no-write-fetch-head
告诉Git不要写文件。在--dry-run
选项下,永远不会写入文件。 - -f
--force -
当
git fetch
与<src>:<dst>
refspec一起使用时,它可能会拒绝更新本地分支,如下面的部分所述。此选项将覆盖该检查。 - -k
--keep -
保持下载的数据包。
- --multiple
-
允许指定几个
和 参数。不能指定 。 - --[no-]auto-maintenance
--[no-]auto-gc -
最后运行
git maintenance run --auto
以在需要时执行自动存储库维护。(--[no-]auto-gc
是同义词。)默认情况下启用此功能。 - --[no-]write-commit-graph
-
提取后写一个提交图。这将覆盖配置设置
fetch.writeCommitGraph
。 - --prefetch
-
修改配置的
refspec
以将所有 ref 放入refs/prefetch/
命名空间。 - -p
--prune -
提取之前,请删除遥控器上不再存在的所有远程跟踪参考。如果仅由于默认标签自动跟随或–tags选项而获取标签,则不对它们进行修剪。但是,如果由于显式refspec(在命令行或在远程配置中,例如,如果使用–mirror选项克隆了远程服务器)而获取了标记,则也将对其进行修剪。提供
--prune-tags
是提供标签refspec的简写。 - -P
--prune-tags -
提取之前,如果启用了
--prune
,请删除远程服务器上不再存在的所有本地标签。与--prune
不同,应该更谨慎地使用此选项,它将删除已创建的所有本地引用(本地标签) - -n
--no-tags -
默认情况下,指向并指向从远程存储库下载的对象的标记,并将其存储在本地。此选项禁用此自动标记跟随。可以使用
remote.<name>.tagOpt
设置指定远程的默认行为。 - --refetch
-
此选项不是与服务器协商以避免传输本地已经存在的提交和关联对象,而是像新克隆一样获取所有对象。使用它从配置中重新应用部分克隆过滤器,或者在过滤器定义更改时使用
--filter=
。自动获取后维护将执行对象数据库包合并以删除任何重复的对象。 - --refmap=<refspec>
-
当获取命令行上列出的引用时,请使用指定的refspec(可以多次提供)将引用映射到远程跟踪分支,而不是远程存储库的
remote.*.fetch
配置变量的值。为--refmap
选项提供空的<refspec>
会导致Git忽略已配置的refspec,并完全依赖作为命令行参数提供的refspec。 - -t
--tags -
从远程获取所有标签(即,将远程标签
refs/tags/*
提取到具有相同名称的本地标签中),以及其他可能会获取的内容。即使使用–prune,单独使用此选项也不会对标签进行修剪(尽管如果标签也是显式 --prune 的目标,标签也可能会被修剪;请参阅–prune)。 - --recurse-submodules[=yes|on-demand|no]
-
此选项控制是否以及在什么条件下也应该获取子模块的新提交。当通过子模块递归时, git fetch 总是尝试获取“更改”的子模块,即具有被新获取的超级项目提交引用但在本地子模块克隆中丢失的提交的子模块。可以获取更改的子模块,只要它存在于本地,
-
当设置为
on-demand
时,仅获取更改的子模块。设置为yes
时,将获取所有填充的子模块,并获取未填充和更改的子模块。当设置为no
时,永远不会获取子模块。 -
如果未指定,这将使用
fetch.recurseSubmodules
的值(如果已设置),如果未设置则默认为on-demand
。当此选项不带任何值使用时,默认为yes
。 - -j
--jobs=<n> -
所有形式的取材都要用到的平行子代数。
-
如果指定了
--multiple
选项,则将并行获取不同的遥控器。如果获取多个子模块,则将并行获取它们。要独立控制它们,请使用配置设置fetch.parallel
和submodule.fetchJobs
-
通常情况下,并行递归和多远程的获取会更快。默认情况下,检索是按顺序执行的,而不是并行的。
- --no-recurse-submodules
-
禁用子模块的递归提取(与使用
--recurse-submodules=no
选项具有相同的效果)。 - --set-upstream
-
如果成功获取了远程,请添加上游(跟踪)引用,该引用由无参数git pull和其他命令使用。
- --submodule-prefix=<path>
-
将
附加到在信息性消息中打印的路径,例如“ Fetching submodule foo”。在子模块上递归时在内部使用此选项。 - --recurse-submodules-default=[yes|on-demand]
-
此选项在内部用于临时为
--recurse-submodules
选项提供非负默认值。所有其他配置 fetch 的子模块递归的方法都会覆盖此选项,直接指定--[no-]recurse-submodules
也是如此。 - -u
--update-head-ok -
默认情况下, git fetch 拒绝更新与当前分支相对应的head。该标志禁用检查。这纯粹是供 git pull 与 git fetch 进行通信的内部使用,除非您实现自己的Porcelain,否则不应使用它。
- --upload-pack <upload-pack>
-
如果给定了信息,并且要从中获取信息的存储库由 git fetch-pack 处理,则
--exec=<upload-pack>
会传递给命令,以为另一端运行的命令指定非默认路径。 - -q
--quiet -
将
--quiet
传给git-fetch-pack
,让其他内部使用的 git 命令静音。进度不会报告到标准错误流中。 - -v
--verbose -
Be verbose.
- --progress
-
除非指定了 -q,否则当标准错误流连接到终端时,默认情况下会在标准错误流上报告进度状态。即使标准错误流没有指向终端,该标志也会强制报告进度状态。
- -o <option>
--server-option=<option> -
使用协议版本 2 进行通信时将给定字符串传输到服务器。给定字符串不能包含 NUL 或 LF 字符。服务器对服务器选项(包括未知选项)的处理是特定于服务器的。当给出多个
--server-option=<option>
时,它们都按照命令行中列出的顺序发送到另一端。 - --show-forced-updates
-
默认情况下,git检查在提取过程中是否强制更新了分支。可以通过fetch.showForcedUpdates禁用此功能,但是–show-forced-updates选项可确保进行此检查。
- --no-show-forced-updates
-
默认情况下,git检查在提取过程中是否强制更新了分支。传递–no-show-forced-updates或将fetch.showForcedUpdates设置为false可出于性能原因跳过此检查。如果在 git-pull 期间使用,则–ff-only选项仍将在尝试快速转发更新之前检查强制更新。
- -4
--ipv4 -
只使用IPv4地址,忽略IPv6地址。
- -6
--ipv6 -
只使用IPv6地址,忽略IPv4地址。
- <repository>
-
作为提取或拉取操作来源的“远程”存储库。此参数可以是URL或遥控器的名称。
- <refspec>
-
指定要获取的参考和要更新的本地参考。当命令行上没有
出现时,要从 remote.<repository>.fetch
变量读取要获取的ref -
参数的格式是可选的plus + ,后跟源 ,后跟冒号 : ,然后是目标ref 。 为空时,可以省略冒号。 通常是引用,但也可以是完全拼写的十六进制对象名称。 -
的 中可能包含 *
,表示简单的模式匹配。这样的refspec就像glob一样,可以匹配具有相同前缀的所有ref。模式的 和 都必须带有 *
。通过将*
替换为源中匹配的内容,它将引用映射到目标。 -
如果refspec带有
^
前缀,它将被解释为否定的refspec。与其指定要获取的参考文献或要更新的本地参考文献,不如说这样的refspec将指定要排除的参考文献。如果一个参考至少匹配一个正参考规范,但不匹配任何负参考规范,则该参考将被视为匹配。负参考规范可用于限制图案参考规范的范围,以使其不包括特定参考。负refspec本身可以是模式refspec。但是,它们只能包含,而不能指定 。还不支持完全拼写的十六进制对象名称。 -
tag <tag>
含义与refs/tags/<tag>:refs/tags/<tag>
;它要求提取所有内容直到指定的标签。 -
获取与
匹配的远程引用,并且如果 不是空字符串,则尝试更新与之匹配的本地ref。 -
--force
的情况下是否允许更新取决于它被提取到的 ref 命名空间、被提取的对象的类型以及更新是否被认为是快进。