本地Git分支与远程差异过大,如何强制拉取覆盖本地分支?
本地Git分支与远程差异过大的覆盖/清理方案
当本地分支和远程分支差异极大,没法通过常规拉取合并时,这两个方案可以直接让本地分支和远程完全同步:
方案一:强制重置本地分支(无需删除分支)
- 切换到要同步的目标分支(比如你的分支叫
feature-branch):git checkout feature-branch - 拉取远程分支的最新代码(只拉取不合并):
git fetch origin feature-branch - 强制把本地分支重置为远程分支的最新状态:
警告:git reset --hard origin/feature-branch--hard会彻底丢弃本地所有未提交的修改和分支上的独有提交,执行前一定要确认本地没有需要保留的内容!
方案二:删除本地分支后重新拉取(更彻底)
- 先切换到其他分支(比如
main,不能在要删除的分支上操作):git checkout main - 强制删除目标本地分支:
用git branch -D feature-branch-D是强制删除,不管分支有没有未合并的内容。 - 从远程重新拉取并创建本地分支:
git checkout -b feature-branch origin/feature-branch
为什么之前的git pull --force会报错?
git pull本质是git fetch加git merge的组合命令,--force参数对merge操作无效。当本地和远程分支差异太大时,merge无法执行快进操作,所以会抛出fatal: Not possible to fast-forward, aborting.的错误。上面的两种方案跳过了合并步骤,直接让本地分支和远程分支完全对齐,自然不会有这个问题。
内容的提问来源于stack exchange,提问作者SlugLord
相关产品推荐
相关产品推荐

