原文:Git Pull Explained

git pull 是一个 Git 命令,用于从远程更新仓库的本地版本。

它是 Git 用于网络交互的四个命令之一。默认情况下, git pull 会做两件事。

  • 更新当前本地工作分支(当前签出分支)
  • 更新所有其他分支的远程跟踪分支

git pull 获取(git fetch)新的提交并将它们合并(git merge)到你的本地分支中。

该命令的语法如下:

# 一般格式
git pull OPTIONS REPOSITORY REFSPEC

# 从某个分支拉取
git pull REMOTE-NAME BRANCH-NAME

其中:

  • OPTIONS 是命令选项,例如 --quiet--verbose,你可以在 Git 文档中阅读有关不同选项的更多信息
  • REPOSITORY 是你的仓库的 URL,示例:https://github.com/freeCodeCamp/freeCodeCamp.git
  • REFSPEC 指定要获取哪些 refs 以及要更新哪些本地 refs
  • REMOTE-NAME 是你的远程仓库的名称,例如:origin
  • BRANCH-NAME 是你的分支的名称,例如:develop

注意

如果你有未提交的更改,则 git pull 命令的合并部分将失败,而你的本地分支将保持不变。

因此,在从远程仓库中提取新提交之前,你应该始终在分支中提交你的更改。

目录

  • 使用 git pull
  • 分布式版本控制
  • git fetch + git merge
  • 在 IDE 中使用 git pull

使用 git pull

使用 git pull 从对应的远程仓库更新本地仓库。例如:在 master 本地工作时,执行 git pull 以更新 master 的本地副本并更新其他远程跟踪分支。(下一节中有关于远程跟踪分支的更多信息。)

但是,要使该示例正确,请记住以下几点:

本地仓库有一个链接的远程仓库

  • 通过执行 git remote -v 检查这一点
  • 如果有多个远程, git pull 可能没有足够的信息,你可能需要输入 git pull origingit pull upstream

你当前签出到的分支具有相应的远程跟踪分支

  • 通过执行 git status 来检查,如果没有远程跟踪分支,Git 不知道从哪里获取信息。

分布式版本控制

Git 是一个分布式版本控制系统。开发人员可以使用 Git 在不同的环境中同时处理同一个文件。将代码推送到共享远程仓库后,其他开发人员可以拉取更改的代码。

Git 中的交互

在 Git 中用于交互的命令只有四个。在有信息请求之前,本地仓库不知道远程仓库上所做的更改。而且,在提交 commit 之前,远程仓库不知道本地更改。

四个命令是:

  • git clone
  • git fetch
  • git pull
  • git push

Git 分支

使用 Git 时,你会感觉到处都是相同代码的大量副本。每个分支上都有相同文件的不同版本。并且,每个开发人员的计算机和远程上都有的相同分支的不同副本。为了跟踪这一点,Git 使用了一种叫做远程跟踪分支的东西。

如果你在 Git 仓库中执行 git branch --all,远程跟踪分支将显示为红色。这些是远程显示的代码的只读副本。(最后一次将信息带到本地的交互是什么时候?记住该信息的最后更新时间。远程跟踪分支中的信息反映了来自该交互的信息。)

使用远程跟踪分支,你可以在多个分支上使用 Git 工作,而无需交互。每次执行 git pullgit fetch 命令时,都会更新远程跟踪分支。

git fetch + git merge

git pull 是一个组合命令,等于 git fetch + git merge

git fetch

git fetch 自行更新本地仓库中的所有远程跟踪分支。实际上没有任何更改反映在任何本地工作分支上。

git merge

不带任何参数,git merge 会将对应的远程跟踪分支合并到本地工作分支。

git pull

git fetch 更新远程跟踪分支。git merge 使用相应的远程跟踪分支更新当前分支。使用 git pull,你可以获得这两个更新。但是,这意味着如果你签出到 feature 分支并执行 git pull,当你签出到 master 时,将不会包含任何新的更新。每当你签出到另一个可能有新更改的分支时,执行 git pull 总是一个好主意。

在 IDE 中使用 git pull

其他 IDE 中的通用语言可能不包含 pull 这个词。如果你没有找到 git pull,请使用单词 sync 来代替。

获取远程 PR(拉取请求)到本地仓库

出于审查等目的,应将远程 PR 获取到本地仓库。你可以按如下方式使用 git fetch 命令来实现此目的。

git fetch origin pull/ID/head:BRANCHNAME

ID 是拉取请求 id,BRANCHNAME 是你要创建的分支的名称。创建分支后,你可以使用 git checkout 切换到该分支。