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 origin
或git 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 pull
或 git 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
切换到该分支。