Skip to content

Git pull 避免提交历史变复杂

July 26, 2024 by ccforeverd

git pullgit fetchgit merge 的组合

git fetch

git fetch 命令从远程仓库获取最新的代码到本地, 但不会自动合并代码

Terminal
git fetch <remote> <branch>

示例: 从名为 origin 的远程仓库获取最新代码

Terminal
git fetch origin

git merge

git merge 将另一个分支的更改合并到当前分支

通常在使用 git fetch 获取了最新的远程更改后, 使用 git merge 将这些更改合并到当前分支

Terminal
git merge <branch>

git pull 的过程发生了什么

  • git fetch 从云端拉取最新代码
  • git merge 将云端代码与本地代码合并

如何保证 git 历史的线性

非常简单, 我们只需要使用 rebase (变基)命令即可

Terminal
git pull --rebase

自动变基

我们可以配置 git 使其在 pull 时自动变基

Terminal
# git pull 默认使用变基操作
git config --global pull.rebase true

如果你还是执意喜欢 merge, 那么使用下面的命令

Terminal
# git pull默认使用合并操作
git config --global pull.rebase false

自动变基的问题

如果你本地文件有更改的话, 变基会失败, 因为变基前服务区必须是干净的

两个解决办法:

  • git pull 前, 先使用 git commit 暂存代码
  • git pull 前, 先将使用 git stash 将保存

git stash

git stash 会将当前工作区的更改暂存起来, 以便你可以在之后的任何时候恢复

Terminal
# 暂存当前工作区
git stash
 
# 恢复暂存的工作区
git stash pop

git pull 时冲突问题

如果 git pull 时发生冲突, 那么你需要手动解决冲突

Terminal
# 查看冲突文件
git status
 
# 手动解决冲突
# 解决完冲突后, 使用 git add 命令将文件标记为已解决
git add <file>
 
# 继续变基
git rebase --continue