返回顶部
本页目录

pull

从远程获取代码并合并本地的版本

实例

取回远程仓库的变化,并与本地分支合并

                            
  • git pull [remote] [branch]

选项

-q
--quiet

这将被传递给底层的 git fetch 来压制传输过程中的报告,以及底层的 git merge 来压制合并过程中的输出。

-v
--verbose

将–verbose传递给git-fetch和git-merge。

--[no-]recurse-submodules[=yes|on-demand|no]

此选项控制是否应提取已填充子模块的新提交,以及是否也应更新活动子模块的工作树。

如果通过rebase进行签出,本地子模块的提交也会被重新基于。

如果通过合并的方式进行更新,则解决了子模块的冲突,并检查出来。

--commit
--no-commit

执行合并并提交结果。这个选项可以用来覆盖 --no-commit。只在合并的时候有用。

使用–no-commit执行合并,并在创建合并提交前停止,让用户在提交前有机会检查并进一步调整合并结果。

请注意,快进更新并不创建合并提交,因此无法使用 --no-commit 来停止这些合并。因此,如果你想确保你的分支不被合并命令修改或更新,请使用 --no-ff--no-commit

--edit
-e
--no-edit

提交成功的机械合并之前,请调用编辑器以进一步编辑自动生成的合并消息,以便用户可以解释并证明合并的合理性。所述 --no-edit 选项可用于接受自动生成的消息

较早的脚本可能取决于不允许用户编辑合并日志消息的历史行为。他们将在运行 git merge 时看到一个打开的编辑器。为了更容易地将这些脚本调整为更新的行为,可以在它们的开头将环境变量 GIT_MERGE_AUTOEDIT 设置为 no

--cleanup=<mode>

该选项确定提交前如何清除合并消息。如果为 <mode> 赋予 scissors 值,则在发生合并冲突的情况下,剪刀将被附加到 MERGE_MSG 上,然后传递给提交机制。

--ff-only

只有在没有分歧的本地历史时才更新到新的历史。当没有提供调和分歧历史的方法时(通过–rebase=*标志),这是默认的。

--ff
--no-ff

当合并而不是变基时,指定当合并历史已经是当前历史的后代时如何处理合并。如果请求合并,--ff 是默认值,除非合并未存储在 refs/tags/ 层次结构中其自然位置的带注释(并且可能已签名)的标签,在这种情况下假定 --no-ff

使用 --ff ,尽可能将合并解析为快进(仅更新分支指针以匹配合并的分支;不创建合并提交)。如果不可能(当合并的历史记录不是当前历史记录的后代时),请创建合并提交。

使用 --no-ff ,即使在合并可以替代为快进的情况下,也可以在所有情况下创建合并提交。

-S[<keyid>]
--gpg-sign[=<keyid>]
--no-gpg-sign

GPG对结果合并提交进行签名。所述 keyid 的参数是可选的,并且默认为提交者身份; 如果指定,则必须将其固定在选项中,且不能留空格。 --no-gpg-sign 有助于 commit.gpgSign 配置变量和更早的 --gpg-sign

--log[=<n>]
--no-log

除了分支名称之外,使用来自最多 <n> 个正在合并的实际提交的单行描述填充日志消息。仅在合并时有用。

使用–no-log时,不列出实际提交中的单行描述。

--stat
-n
--no-stat

在合并结束时显示一个diffstat。diffstat也由配置选项merge.stat控制。

使用-n或–no-stat在合并结束时不显示diffstat。

--squash
--no-squash

产生工作树和索引状态,就像发生真正的合并一样(合并信息除外),但实际上不进行提交,移动 HEAD 或记录 $GIT_DIR/MERGE_HEAD (以使下一个 git commit 命令创建一个合并提交)。这使您可以在当前分支的顶部创建一个提交,其作用与合并另一个分支的作用相同

使用 --no-squash 执行合并并提交结果。这个选项可以用来覆盖–squash。

使用–squash,–commit是不允许的,而且会失败。

只有在合并的时候才有用。

--[no-]verify

默认情况下,会运行 pre-mergecommit-msg 挂钩。当给出 --no-verify 时,这些将被绕过。仅在合并时有用。

-s <\strategy>
--strategy=<strategy>

使用给定的合并策略;可以多次提供以按照应尝试的顺序指定它们。如果没有 -s 选项,则使用内置的策略列表( ort 合并单个头部时,否则使用 octopus )。

-X <option>
--strategy-option=<option>

将合并策略的特定选项传递给合并策略。

--verify-signatures
--no-verify-signatures

验证被合并的侧分支的提示提交是否用有效的密钥签署,即具有有效uid的密钥:在默认的信任模型中,这意味着签署密钥已经由受信任的密钥签署。如果侧分支的提示提交不是用有效的密钥签署的,合并就会中止。

只有在合并的时候才有用。

--summary
--no-summary

与–stat和–no-stat的同义词;这两个词已经过时,将来会被删除。

--autostash
--no-autostash

在操作开始前自动创建一个临时的 stash 条目,将其记录在特殊 ref MERGE_AUTOSTASH 中并在操作结束后应用。这意味着您可以在脏工作树上运行该操作。但是,请谨慎使用:成功合并后的最终存储应用程序可能会导致重大冲突。

--allow-unrelated-histories

默认情况下, git merge 命令拒绝合并不共享共同祖先的历史记录。当合并两个独立开始的项目的历史时,可以使用此选项来覆盖此安全性。因为这是非常罕见的情况,所以默认情况下不存在用于启用此功能的配置变量,因此不会添加。

只有在合并的时候才有用。

-r
--rebase[=false|true|merges|interactive]

true,在获取后将当前分支重基到上游分支之上。如果有一个远程跟踪分支与上游分支相对应,且上游分支自上次获取后被重基,则重基使用该信息以避免重基非本地变化。

merges,使用变基 git rebase --rebase-merges ,以便本地合并提交被包括在变基

false ,将上游分支合并到当前分支。

interactive ,使底垫的交互模式。

--no-rebase

这是对–rebase=false的简写。

--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

在不做任何改变的情况下,显示出会怎么做。

-f
--force

当 git fetch 与 <src>:<dst> refspec一起使用时,它可能会拒绝更新本地分支。此选项将覆盖该检查。

-k
--keep

保持下载的数据包。

--prefetch

修改配置的 refspec 以将所有 ref 放入 refs/prefetch/ 命名空间

-p
--prune

提取之前,请删除遥控器上不再存在的所有远程跟踪参考。如果仅由于默认标签自动跟随或–tags选项而获取标签,则不对它们进行修剪。但是,如果由于显式refspec(在命令行或在远程配置中,例如,如果使用–mirror选项克隆了远程服务器)而获取了标记,则也将对其进行修剪。提供 --prune-tags 是提供标签refspec的简写。

--no-tags

默认情况下,指向并指向从远程存储库下载的对象的标记,并将其存储在本地。此选项禁用此自动标记跟随。可以使用remote<name>.tagOpt设置指定远程的默认行为。

--refmap=<refspec>

当获取命令行上列出的引用时,请使用指定的refspec(可以多次提供)将引用映射到远程跟踪分支,而不是远程存储库的 remote.*.fetch 配置变量的值

-t
--tags

从远程获取所有标签(即,将远程标签 refs/tags/* 提取到具有相同名称的本地标签中),以及其他可能会获取的内容。即使使用–prune,单独使用此选项也不会对标签进行修剪(尽管如果标签也是显式 --prune 的目标,标签也可能会被修剪)。

-j
--jobs=<n>

所有形式的取材都要用到的平行子代数。

如果指定了 --multiple 选项,则将并行获取不同的遥控器。如果获取多个子模块,则将并行获取它们。要独立控制它们,请使用配置设置 fetch.parallelsubmodule.fetchJobs

通常情况下,并行递归和多远程的获取会更快。默认情况下,检索是按顺序执行的,而不是并行的。

--set-upstream

如果成功获取了远程,请添加上游(跟踪)引用,该引用由无参数git-pull和其他命令使用

--upload-pack <upload-pack>

如果给定了信息,并且要从中获取信息的存储库由 git fetch-pack 处理,则 --exec=<upload-pack> 会传递给命令,以为另一端运行的命令指定非默认路径。

--progress

除非指定了 -q,否则当标准错误流连接到终端时,默认情况下会在标准错误流上报告进度状态。即使标准错误流没有指向终端,该标志也会强制报告进度状态。

-o <option>
--server-option=<option>

使用协议版本 2 进行通信时将给定字符串传输到服务器。给定字符串不能包含 NULLF 字符。服务器对服务器选项(包括未知选项)的处理是特定于服务器的。当给出多个 --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 命名空间、被提取的对象的类型以及更新是否被认为是快进。