# git-pull > 原文: [https://git-scm.com/docs/git-pull](https://git-scm.com/docs/git-pull) ## 名称 git-pull - 从另一个存储库或本地分支获取并与其集成 ## 概要 ``` git pull [] [ […​]] ``` ## 描述 将来自远程存储库的更改合并到当前分支中。在默认模式下,`git pull`是`git fetch`的缩写,后跟`git merge FETCH_HEAD`。 更确切地说, _git pull_ 使用给定参数运行 _git fetch_ 并调用 _git merge_ 将检索到的分支头合并到当前分支中。使用`--rebase`,它运行 _git rebase_ 而不是 _git merge_ 。 <库>应该是传递给 [git-fetch [1]](https://git-scm.com/docs/git-fetch) 的一个远程存储库的名称。 <的Refspec>可以命名任意远程引用(例如,标签的名称),或者甚至是具有相应远程跟踪分支的引用集合(例如,refs / heads / *:refs / remotes / origin / *),但通常它是远程存储库中分支的名称。 < repository>和< branch>的默认值从 [git-branch [1]](https://git-scm.com/docs/git-branch) `--track`设置的当前分支的“远程”和“合并”配置中读取。 假设存在以下历史记录并且当前分支为“`master`”: ``` A---B---C master on origin / D---E---F---G master ^ origin/master in your repository ``` 因为它偏离本地`master`(即`E`),所以“`git pull`”将从远程`master`分支获取并重放相应的更改,直到它的当前提交(`C`)在`master`上面并将结果记录在新提交中,同时记录两个父提交的名称以及描述更改的用户的日志消息。 ``` A---B---C origin/master / \ D---E---F---G---H master ``` 有关详细信息,请参阅 [git-merge [1]](https://git-scm.com/docs/git-merge) ,包括如何呈现和处理冲突。 在Git 1.7.0或更高版本中,要取消一个有冲突的合并,请使用`git reset --merge`。 **警告**:在旧版本的Git中,不鼓励使用未提交的更改运行 _git pull_ :尽管或许可行,但它可能会使您处于难以退出的冲突状态 如果任何远程更改与本地未提交的更改重叠,则将自动取消合并并且不更改工作树。通过 [git-stash [1]](https://git-scm.com/docs/git-stash) 拉动或存放它们之前,通常最好在工作顺序中进行任何局部更改。 ## OPTIONS ``` -q ``` ``` --quiet ``` 这将传递给基础git-fetch以在传输过程中进行静噪报告,并在合并期间将基础git-merge传递给静噪输出。 ``` -v ``` ``` --verbose ``` 传递--verbose到git-fetch和git-merge。 ``` --[no-]recurse-submodules[=yes|on-demand|no] ``` 此选项控制是否应该获取和更新所有已填充子模块的新提交(请参阅 [git-config [1]](https://git-scm.com/docs/git-config) 和 [gitmodules [5]](https://git-scm.com/docs/gitmodules) )。 如果通过rebase完成检出,则本地子模块提交也会被重新设置。 如果通过合并完成更新,则解析并检出子模块冲突。 ### 与合并相关的选项 ``` --commit ``` ``` --no-commit ``` 执行合并并提交结果。此选项可用于覆盖--no-commit。 使用--no-commit执行合并但假装合并失败并且不自动提交,以便让用户有机会在提交之前检查并进一步调整合并结果。 ``` --edit ``` ``` -e ``` ``` --no-edit ``` 在提交成功的机械合并之前调用编辑器以进一步编辑自动生成的合并消息,以便用户可以解释并证明合并。 `--no-edit`选项可用于接受自动生成的消息(通常不鼓励这样做)。 较旧的脚本可能取决于不允许用户编辑合并日志消息的历史行为。他们将在运行`git merge`时看到编辑器打开。为了便于将此类脚本调整为更新的行为,可以在环境变量`GIT_MERGE_AUTOEDIT`的开头设置为`no`。 ``` --ff ``` 当合并解析为快进时,仅更新分支指针,而不创建合并提交。这是默认行为。 ``` --no-ff ``` 即使合并解析为快进,也要创建合并提交。这是在 _refs / tags /_ 层次结构中合并未存储在其自然位置的带注释(且可能已签名)的标记时的默认行为。 ``` --ff-only ``` 拒绝以非零状态合并和退出,除非当前`HEAD`已经是最新的,或者合并可以解析为快进。 ``` -S[] ``` ``` --gpg-sign[=] ``` GPG签署生成的合并提交。 `keyid`参数是可选的并且默认为提交者标识;如果具体指定,它必须粘在没有空格的选项上。 ``` --log[=] ``` ``` --no-log ``` 除了分支名称之外,还使用最多< n>的单行描述填充日志消息。正在合并的实际提交。另见 [git-fmt-merge-msg [1]](https://git-scm.com/docs/git-fmt-merge-msg) 。 使用--no-log不会列出正在合并的实际提交中的单行描述。 ``` --signoff ``` ``` --no-signoff ``` 在提交日志消息的末尾由提交者逐行添加签名。签收的含义取决于项目,但它通常证明提交者有权在同一许可下提交此作品并同意开发者原产地证书(参见 [http://developercertificate.org/](http://developercertificate.org/) ] 欲获得更多信息)。 使用--no-signoff时不要添加类似Sign-off-by的短行。 ``` --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。 ``` -s ``` ``` --strategy= ``` 使用给定的合并策略;可以多次提供,以按照应该尝试的顺序指定它们。如果没有`-s`选项,则使用内置的策略列表(合并单个头时 _git merge-recursive_ ,否则使用 _git merge-octopus_ )。 ``` -X