git pull 总是弹出新提交窗口的问题咨询
这个问题我之前也碰到过,其实是Git合并策略的触发条件变了,咱们一步步来拆解原因和解决办法:
为什么会弹出提交窗口?
之前你执行git pull时能自动合并,是因为当时你的本地master分支和远程origin/master是线性同步的——远程没有新的提交,或者你的本地提交是基于最新远程提交的,Git可以直接用「快进合并(fast-forward)」把本地分支指针移到远程分支的位置,不需要生成新的合并提交。
现在每次弹出提交窗口,说明你的本地分支和远程分支已经分叉了:远程有新的提交,而你本地也有未推送到远程的提交,Git无法直接快进,必须创建一个新的「合并提交」来整合两边的修改,这时候就会自动打开编辑器让你填写合并提交的信息。
解决办法
1. 先确认分支状态
先执行这个命令看看分支的分叉情况:
git log --oneline --graph --all
你会看到本地master和远程origin/master有两条不同的提交线,这就是分叉的证据。
2. 恢复自动快进的合并方式
如果想回到之前无需手动填写提交信息的状态,可以用--ff-only参数执行pull:
git pull --ff-only
这个命令的意思是「只允许快进合并」,如果无法快进(也就是分支分叉了),Git会直接报错。这时候你需要先把本地提交推送到远程:
git push origin master
推送成功后再执行git pull --ff-only,就能自动合并了。
3. 改用Rebase方式替代Merge
如果你不想产生多余的合并提交,可以设置Git默认用Rebase来拉取代码:
# 全局设置(所有仓库生效) git config --global pull.rebase true # 仅当前仓库生效 git config pull.rebase true
这样每次git pull时,Git会把你的本地提交「变基」到远程分支的最新提交之上,相当于把你的提交重新排列在远程提交后面,不会产生合并提交,自然也就不会弹出编辑器了。不过要注意:如果是多人协作的公共分支,不建议用Rebase,因为它会改写提交历史。
4. 关闭合并提交的编辑器(不推荐)
如果你只是不想每次都打开编辑器,可以设置Git默认使用一个空的合并提交信息:
git config --global merge.commit false
不过这个方法不推荐,因为合并提交的信息能帮你记录合并的上下文,方便后续排查问题。
内容的提问来源于stack exchange,提问作者Invictus

