Skip to content

冲突

远程有新提交,本地未提交改动(未进行 add 或 commit)

sh
git stash
git pull
git stash pop

远程有新提交,本地提交改动

假设你在本地分支做了一些提交(例如 commit1、commit2),而此时远程分支也有新的提交(如 commitA、commitB)。这时你直接 git push,可能会因为历史不一致而被拒绝,需要先和远程分支同步。

git pull --rebase 会先拉取远程分支的新提交(如 commitA、commitB),然后把你本地的提交(commit1、commit2)“摘下来”,依次应用在最新的远程分支之后。 其过程如下:

获取远程提交(fetch) 将本地分支回退到远程分支的最新提交(HEAD 指向 commitB) 依次将你本地的 commit1、commit2 应用(replay)到 commitB 之后 如果发生冲突 在 rebase 的过程中,如果 commit1 或 commit2 和远程的 commitA、commitB 有冲突,git 会提示冲突,需要你手动解决。 解决冲突后,使用 git add 解决的文件,然后 git rebase --continue 继续 rebase 流程,直到所有提交应用完毕。

总结 git pull --rebase 能让本地提交以更干净的线性历史插入到远程分支最新提交后。如果有冲突,需要你逐一解决。比起直接 merge,rebase 让历史更整洁,避免了多余的 merge commit。

sh
git pull --rebase
# 发现冲突,手动解决,解决后重新添加该文件
git add <冲突文>
git rebase --continue
# 重复直到 rebase 完成