git pull

文章目录

  • 1.简介
  • 2.格式
  • 3.选项
  • 4.示例
    • [4.1 基础用法](#4.1 基础用法)
    • [4.2 使用 rebase 代替 merge(推荐)](#4.2 使用 rebase 代替 merge(推荐))
    • [4.3 只允许快进](#4.3 只允许快进)
    • [4.4 自动暂存本地修改](#4.4 自动暂存本地修改)
    • [4.5 拉取指定分支到本地指定分支](#4.5 拉取指定分支到本地指定分支)
  • [5. 注意](#5. 注意)
    • [5.1 `git pull` vs `git fetch`](#5.1 git pull vs git fetch)
    • [5.2 解决 `git pull` 产生的合并冲突](#5.2 解决 git pull 产生的合并冲突)
    • [5.3 避免"丑的"合并提交](#5.3 避免“丑的”合并提交)
    • [5.4 常用别名设置](#5.4 常用别名设置)
  • [6. 小结](#6. 小结)
  • 参考文献

1.简介

git pull 是 Git 中最常用的命令之一,用于从远程仓库拉取最新代码并合并到当前分支

它实际上是两个命令的组合:

bash 复制代码
git fetch + git merge
  • git fetch:从远程下载最新代码(不自动合并)
  • git merge:将下载的代码合并到当前分支

⚠️ git pull 会自动执行合并,可能会产生合并提交。如果希望避免自动合并,可以使用 git pull --rebase

2.格式

bash 复制代码
git pull [<options>] [<repository> [<refspec>]]

repository 为远程仓库名称,指定从哪个远程仓库拉取,默认为 origin。

refspec 为引用规格,用于指定拉取哪些引用(分支/标签),以及如何映射到本地引用。它的格式灵活,可以是以下几种形式:

形式 示例 说明
<分支名> main 拉取远程分支,并合并到当前分支
<分支名>:<本地分支名> main:feature 拉取远程分支,并合并到指定的本地分支
+<分支名> +main 强制拉取(允许非快进更新)
<标签名> v1.0.0 拉取指定标签
refs/heads/*:refs/remotes/origin/* (默认) 拉取所有分支到远程跟踪分支

3.选项

bash 复制代码
-r, --rebase
  使用 rebase 方式合并,而不是 merge(保持线性历史)

--ff-only
  只允许快进合并,如果不能快进则报错

--no-ff
  强制创建合并提交(即使可以快进)

--autostash
  拉取前自动暂存本地未提交的修改,拉取后自动恢复

--no-commit
  拉取并合并,但不自动提交

-v, --verbose
  显示详细信息

--all
  拉取所有远程分支的更新

4.示例

4.1 基础用法

bash 复制代码
# 拉取 origin 远程的 main 分支,并合并到当前分支
git pull origin main

# 如果当前分支已关联远程分支,直接执行
git pull

4.2 使用 rebase 代替 merge(推荐)

bash 复制代码
# 拉取并变基,保持线性历史
git pull --rebase origin main

git pull --rebase = git fetch + git rebase,而不是默认的 git fetch + git merge

使用 --reabase 选项可以使项目提交历史变成直线,没有分叉,非常整洁。

简单来说:它把你本地独有的提交"挪"到远程最新提交的后面,而不是创建一个合并提交来"汇合",即可以消除 Merge branch 'main' of <repository path> 这种 commit 记录。建议使用 -r(--rebase)选项。

4.3 只允许快进

bash 复制代码
# 只能快进,否则报错(避免意外创建合并提交)
git pull --ff-only origin main

4.4 自动暂存本地修改

bash 复制代码
# 拉取前自动 stash,拉取后自动 stash pop
git pull --autostash origin main

4.5 拉取指定分支到本地指定分支

bash 复制代码
# 将远程 dev 分支拉取到本地的 feature 分支
git pull origin dev:feature

5. 注意

5.1 git pull vs git fetch

命令 行为 适用场景
git fetch 只下载,不合并 先查看远程更新,再决定是否合并
git pull 下载 + 自动合并 确信没有冲突,快速同步

5.2 解决 git pull 产生的合并冲突

bash 复制代码
# 拉取时产生冲突
git pull origin main
# CONFLICT in main.go

# 手动解决冲突后
git add .
git commit -m "Merge remote-tracking branch 'origin/main'"

# 或者放弃合并
git merge --abort

5.3 避免"丑的"合并提交

bash 复制代码
# 推荐:使用 rebase 保持线性历史
git pull --rebase origin main

# 或者设置为默认行为
git config --global pull.rebase true

5.4 常用别名设置

bash 复制代码
git config --global alias.pu "pull --rebase"
git config --global alias.puf "pull --rebase --autostash"

# 使用别名
git pu origin main
git puf origin main

6. 小结

需求 命令 说明
普通拉取(默认) 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

相关推荐
咖啡星人k3 小时前
MonkeyCode 的 Git 集成:AI编程如何与版本控制无缝协作
git·ai编程·monkeycode
恋喵大鲤鱼4 小时前
git remote
git·git remote
恋喵大鲤鱼5 小时前
git cherry-pick
git·git cherry-pick
恋喵大鲤鱼5 小时前
git push
git·git push
stevenzqzq6 小时前
androidstudio 上配置git
git
向日葵.7 小时前
linux & qnx & git 命令 2
linux·运维·git
恋喵大鲤鱼7 小时前
git log
git·git log
阿明68 小时前
Git的原理与使用
git
阿旭超级学得完8 小时前
Linux基础指令 四(apt,vim,git,cgdb)
linux·服务器·开发语言·数据结构·c++·git·vim