git pull
文章目录
- 1.简介
- 2.格式
- 3.选项
- 4.示例
- 4.1 基础用法
- 4.2 使用 rebase 代替 merge(推荐)
- 4.3 只允许快进
- 4.4 自动暂存本地修改
- 4.5 拉取指定分支到本地指定分支
- 5. 注意
- 5.1 `git pull` vs `git fetch`
- 5.2 解决 `git pull` 产生的合并冲突
- 5.3 避免“丑的”合并提交
- 5.4 常用别名设置
- 6. 小结
- 参考文献
1.简介
git pull是 Git 中最常用的命令之一,用于从远程仓库拉取最新代码并合并到当前分支。
它实际上是两个命令的组合:
gitfetch +gitmergegit fetch:从远程下载最新代码(不自动合并)git merge:将下载的代码合并到当前分支
⚠️
git pull会自动执行合并,可能会产生合并提交。如果希望避免自动合并,可以使用git pull --rebase。
2.格式
gitpull[<options>][<repository>[<refspec>]]repository 为远程仓库名称,指定从哪个远程仓库拉取,默认为 origin。
refspec 为引用规格,用于指定拉取哪些引用(分支/标签),以及如何映射到本地引用。它的格式灵活,可以是以下几种形式:
| 形式 | 示例 | 说明 |
|---|---|---|
<分支名> | main | 拉取远程分支,并合并到当前分支 |
<分支名>:<本地分支名> | main:feature | 拉取远程分支,并合并到指定的本地分支 |
+<分支名> | +main | 强制拉取(允许非快进更新) |
<标签名> | v1.0.0 | 拉取指定标签 |
refs/heads/*:refs/remotes/origin/* | (默认) | 拉取所有分支到远程跟踪分支 |
3.选项
-r,--rebase使用 rebase 方式合并,而不是 merge(保持线性历史) --ff-only 只允许快进合并,如果不能快进则报错 --no-ff 强制创建合并提交(即使可以快进)--autostash拉取前自动暂存本地未提交的修改,拉取后自动恢复 --no-commit 拉取并合并,但不自动提交 -v,--verbose显示详细信息--all拉取所有远程分支的更新4.示例
4.1 基础用法
# 拉取 origin 远程的 main 分支,并合并到当前分支gitpull origin main# 如果当前分支已关联远程分支,直接执行gitpull4.2 使用 rebase 代替 merge(推荐)
# 拉取并变基,保持线性历史gitpull--rebaseorigin maingit pull --rebase=git fetch+git rebase,而不是默认的git fetch + git merge。
使用--reabase选项可以使项目提交历史变成直线,没有分叉,非常整洁。
简单来说:它把你本地独有的提交“挪”到远程最新提交的后面,而不是创建一个合并提交来“汇合”,即可以消除Merge branch 'main' of <repository path>这种 commit 记录。建议使用 -r(–rebase)选项。
4.3 只允许快进
# 只能快进,否则报错(避免意外创建合并提交)gitpull --ff-only origin main4.4 自动暂存本地修改
# 拉取前自动 stash,拉取后自动 stash popgitpull--autostashorigin main4.5 拉取指定分支到本地指定分支
# 将远程 dev 分支拉取到本地的 feature 分支gitpull origin dev:feature5. 注意
5.1git pullvsgit fetch
| 命令 | 行为 | 适用场景 |
|---|---|---|
git fetch | 只下载,不合并 | 先查看远程更新,再决定是否合并 |
git pull | 下载 + 自动合并 | 确信没有冲突,快速同步 |
5.2 解决git pull产生的合并冲突
# 拉取时产生冲突gitpull origin main# CONFLICT in main.go# 手动解决冲突后gitadd.gitcommit-m"Merge remote-tracking branch 'origin/main'"# 或者放弃合并gitmerge--abort5.3 避免“丑的”合并提交
# 推荐:使用 rebase 保持线性历史gitpull--rebaseorigin main# 或者设置为默认行为gitconfig--globalpull.rebasetrue5.4 常用别名设置
gitconfig--globalalias.pu"pull --rebase"gitconfig--globalalias.puf"pull --rebase --autostash"# 使用别名gitpu origin maingitpuf origin main6. 小结
| 需求 | 命令 | 说明 |
|---|---|---|
| 普通拉取(默认) | git pull origin main | 下载 + 合并(可能产生合并提交) |
| 拉取并变基(推荐) | git pull --rebase origin main | 保持线性历史 |
| 只允许快进 | git pull --ff-only origin main | 不能快进时报错,避免意外合并 |
| 自动暂存本地修改 | git pull --autostash origin main | 拉取前自动 stash,拉取后自动恢复 |
| 查看远程更新(不合并) | git fetch origin | 先看再决定 |
一句话总结:git pull=git fetch+git merge,是同步远程代码最常用的命令。推荐团队统一使用git pull --rebase保持线性历史,避免出现“丑的”合并提交。如果有本地未提交的修改,可以配合--autostash使用。
参考文献
Git - git-pull Documentation
