git pull
git pull 是最常用、最核心的“拉代码”命令,它实际上是一个“快捷方式”,由两个步骤组成:

git fetch: 从远程仓库获取最新的代码信息(但不合并或修改你本地的文件)。git merge: 将你本地当前分支与刚刚从远程获取的分支进行合并。
git pull 等价于 git fetch + git merge。
基础用法:拉取并合并当前分支
这是最常用的场景,当你只想更新本地代码与远程仓库保持一致时。
命令:
git pull
执行过程:

- Git 会自动识别你当前所在的分支(
main或master)。 - 它会连接到该分支关联的远程分支(
origin/main)。 - 执行
git fetch获取远程仓库的最新提交。 - 执行
git merge将远程分支的更改合并到你的本地当前分支中。
适用场景:
- 你正在
main分支上工作,想同步团队其他人在main分支上的最新提交。 - 你的本地代码已经是最新的,只是想确保没有遗漏任何更新。
从特定远程仓库拉取
如果你的项目配置了多个远程仓库(一个 origin 是官方仓库,一个 upstream 是上游仓库),你需要指定从哪个仓库拉取。
命令:
git pull <远程仓库名> <分支名>
示例:

# 从名为 'upstream' 的远程仓库的 'main' 分支拉取代码 git pull upstream main
适用场景:
- 你 Fork 了别人的项目,并添加了原始项目为
upstream,你想同步原始项目的最新代码到你的 Fork 中。
拉取并指定合并方式(Rebase)
默认情况下,git pull 使用 merge 方式合并,这可能会在提交历史中产生“合并提交”(Merge Commit),让历史记录看起来比较杂乱。
git pull --rebase 使用 rebase(变基)的方式,它会把你的本地提交“临时”移到一边,将远程的最新代码拉取下来,然后再把你的提交“应用”在最新代码的上面,这样历史记录会非常线性、整洁。
命令:
git pull --rebase
或者:
# 使用 -r 作为 --rebase 的简写 git pull -r
适用场景:
- 你在功能分支上开发,想保持干净、线性的提交历史。
- 在提交 PR (Pull Request) 之前,用
git pull --rebase来同步主分支的最新代码,可以避免不必要的合并提交。
拉取特定分支的代码到你当前的本地分支
你希望将远程另一个分支的代码合并到你当前所在的分支(你想把 develop 分支的最新改动同步到你的 feature 分支)。
命令:
git pull <远程仓库名> <远程分支名>:<本地分支名>
注意: <本地分支名> 和你当前所在的分支一样,可以省略。
示例:
# 假设你在 feature/login 分支上,想把远程 develop 分支的代码拉过来合并 git pull origin develop # 或者更明确地写 git pull origin develop:feature/login
只拉取代码不合并(git fetch)
在某些情况下,你可能只想看看远程仓库有什么更新,但不想立即合并,这时 git fetch 就派上用场了。
命令:
git fetch
执行过程:
- 它会获取所有远程分支的最新信息,但不会修改你本地的任何文件或提交。
- 之后,你可以通过
git log查看差异,或者手动决定如何合并。
示例:
# 1. 只拉取,不合并 git fetch # 2. 查看本地分支和远程分支的差异 # 查看当前分支和远程 origin/main 的差异 git log ..origin/main # 3. 如果确认要合并,再手动执行 merge git merge origin/main
适用场景:
- 在合并前,你想先审查一下远程代码的变更内容。
- 你想在不影响当前工作的情况下,保持远程仓库信息的最新。
强制拉取(谨慎使用!)
当你本地的提交与远程分支的提交产生了冲突,并且你确定要丢弃本地的提交,完全采用远程的版本时,可以使用强制拉取。
警告: 这个操作会覆盖你本地的所有未推送的更改,请务必谨慎使用!
命令:
# 1. 先强制拉取,重置你的本地分支 git fetch origin git reset --hard origin/<你的分支名> # 2. 或者使用一个更简洁的命令(效果同上) git pull --force # 或者 git pull -f
适用场景:
- 你的本地分支因为某些原因(如错误提交)变得混乱,而你希望彻底抛弃本地更改,恢复到远程仓库的状态。
- 你是团队负责人,需要将某个分支强制重置到某个特定的提交状态。
常见问题与最佳实践
拉取时遇到冲突怎么办?
当你执行 git pull,如果本地修改和远程修改有冲突,Git 会停止合并并提示你。
- 解决冲突: 手动打开发生冲突的文件,你会看到类似
<<<<<<< HEAD, ,>>>>>>> remote/...的标记,你需要编辑这些文件,决定保留哪些代码,然后删除这些标记。 - 标记解决: 对每个修改过的文件执行
git add <文件名>。 - 完成合并: 最后执行
git commit来完成这次合并。
git pull vs. git fetch + git merge 的选择?
- 日常开发: 大多数情况下,直接用
git pull或git pull --rebase即可,方便快捷。 - 需要谨慎或审查代码时: 使用
git fetch+git log+git merge的组合,让你对代码的变更有完全的控制权。
最佳实践:
- 频繁拉取: 在开始新工作前,以及提交代码前,养成先拉取最新代码的习惯 (
git pull --rebase)。 - 使用
--rebase: 对于功能分支,使用git pull --rebase可以保持提交历史的整洁,方便代码审查。 - 理解
fetch: 学会使用git fetch,它能让你在合并前更清楚地了解远程仓库的状态。
希望这份详细的指南能帮助你熟练地使用 Git 拉取代码!
