git pull
是 git fetch
和 git merge
的组合命令,它会从远程仓库获取最新更改并自动合并到当前分支。
git fetch
只从远程仓库获取最新更改但不自动合并,git rebase
则是将本地提交重新应用到远程分支的最新提交之上。
| 特性 | git pull | git fetch + git rebase | |------|----------|------------------------| | 操作方式 | 自动合并 | 手动重新应用提交 | | 历史记录 | 产生合并提交 | 线性历史记录 | | 冲突处理 | 合并时处理 | 逐个提交处理冲突 | | 安全性 | 直接修改历史 | 更可控的更新方式 |
原因:频繁的合并提交会使历史难以阅读
解决:改用 git fetch
+ git rebase
原因:本地提交与远程更改有冲突 解决:
git fetch
git rebase origin/main
# 遇到冲突时
# 解决冲突后
git add .
git rebase --continue
# 或放弃rebase
git rebase --abort
原因:rebase 会重写历史 解决:
git reflog
找回丢失的提交git config --global pull.rebase true # 设置pull为rebase模式
git config --global pull.ff only # 只允许快进合并
# 获取远程更新但不合并
git fetch origin
# 查看远程和本地差异
git log --oneline main..origin/main
git log --oneline origin/main..main
# 将本地提交rebase到远程分支
git rebase origin/main
# 解决可能出现的冲突后推送
git push origin main