能否让git fetch执行非快进合并?附场景求解
Git Fetch无法执行非快进合并?解决方案看这里
先给你把核心问题说透:git fetch本身根本不负责合并操作,所以不存在「让fetch执行非快进合并」的可能。它的唯一职责就是把远程仓库的最新提交拉到本地,更新对应的远程追踪分支(比如你的origin/master),完全不会改动你的本地工作分支(比如master)。你提到的「git fetch操作失败」应该是个误解——fetch本身不会因为本地分支和远程分支分叉就失败,它只会老老实实把远程的新提交拉下来。
针对你的具体场景,我给你一步步说怎么得到你想要的分支结构:
你的当前分支状态
执行git fetch前:
...--o--o--A <-- origin/master \ C--B <-- master
执行git fetch origin拉取远程新提交D后,本地的远程追踪分支origin/master会更新到D,结构变为:
...--o--o--A--D <-- origin/master \ C--B <-- master
实现非快进合并的步骤
- 确保你当前处于本地
master分支:git checkout master # 如果你用的是Git 2.23及以上版本,也可以用更直观的命令: # git switch master - 执行非快进合并,让Git自动创建合并提交F:
这一步Git会把git merge origin/masterorigin/master(也就是D提交)和本地master(B提交)合并,生成一个新的合并提交F,此时分支结构就变成了你想要的样子:...--o--o--A--D-- \ \ \ F <-- master \ / C--B - 如果需要把合并后的分支推送到远程,让远程的
origin/master也更新到F,执行:
完成后远程和本地的git push origin mastermaster都会指向F,完全符合你的预期。
小提示
如果合并过程中出现代码冲突,Git会暂停合并并提示你解决冲突。你只需要打开冲突文件,手动解决代码矛盾,然后用git add <冲突文件名>标记冲突已解决,最后执行git commit完成合并即可。
内容的提问来源于stack exchange,提问作者Number945
相关产品推荐
相关产品推荐

