为什么在feature1分支执行git pull会拉取到其他分支的变更?
Git pull 拉取到其他分支变更问题解答
你执行的操作如下:
git checkout feature1 # 完成本地开发改动 git pull # 此时合并了大量不属于feature1分支的变更
核心原因
git pull的默认执行逻辑是两步操作:先拉取当前分支绑定的上游追踪分支的所有最新提交,再自动将上游分支的内容合并到当前本地分支,它并不会默认只拉取和本地分支同名的远程分支内容,也不会过滤其他分支的提交。- 你从
release1分支创建feature1分支时,如果没有主动修改上游分支配置,Git会默认将feature1的上游分支设置为创建时基于的远程release1分支。因此你在feature1分支执行git pull时,系统就会拉取远程release1上的所有新提交合并到本地feature1,这些就是你看到的不属于feature1的变更。
误区澄清
并非「分支基于release1创建就必然会拉取release1的变更」,该问题的核心是上游追踪分支的配置规则。如果你在首次推送feature1到远程仓库时使用了git push -u origin feature1命令,就会手动把feature1的上游分支修改为远程的feature1分支,后续执行git pull就只会拉取远程feature1的内容,不会再拉到release1的变更。
修复方案
如果当前错误合并的操作还没有推送到远程仓库,可以执行以下命令回退到git pull之前的状态:
# 先查看提交日志,确认上一个提交就是pull之前的本地开发提交 git log --oneline # 回退到pull之前的状态,注意未提交的本地改动会被清除,请提前做好备份 git reset --hard HEAD~1
如果你需要同步release1的最新变更到feature1来解决后续合并到release1的冲突,更可控的操作方式为:
# 拉取所有远程分支的最新更新,不自动执行合并 git fetch origin # 手动合并远程release1的内容到当前feature1分支,出现冲突可按提示逐步处理 git merge origin/release1
内容的提问来源于stack exchange,提问作者Joshua Foxworth
相关产品推荐
相关产品推荐

