git merge 是将指定分支的变更合并到当前所在分支,必须先 checkout 到目标主干分支再执行 merge;合并前需拉取最新状态,冲突时需手动编辑并 git add 后 commit;完成后应及时清理本地及远程分支。

git merge 不是“把 A 分支合到 B 分支”,而是“把指定分支的变更,合进你当前所在的分支”。绝大多数合并出错、合反方向、白忙活几小时,都卡在这一步。
git merge 应该在哪个分支上执行
必须先 git checkout 到你想保留历史、作为主干的那个分支,再运行 git merge:
- 要把
feature/login合入main→ 先git checkout main,再git merge feature/login - 想把
main的最新修复同步进dev→ 先git checkout dev,再git merge main - 误操作后如果还没
push,可用git reset --hard HEAD~1撤回;一旦推了远程,只能用git revert,否则污染他人历史
合并前必须拉取目标分支最新状态
很多人跳过这步,结果本地 main 落后远程几十个提交,一合并就触发大量本可避免的冲突:
抓取指定 GitHub用户的 Stars 项目,生成标准化中文 Markdown 报告。用户提及「分析 GitHub stars」「导出收藏项目」「汇总 GitHub 星标」「生成 stars 报告」或粘贴含 ?tab=stars 的链接时触发。执行通过 bash...
- 执行
git checkout main后,立刻运行git pull origin main(不是git fetch就完事) - 如果你要合的是远程分支(如
origin/feature/x),也建议先git fetch更新远程引用,再git merge origin/feature/x - Git 2.38+ 默认用
ort合并策略,比旧recursive更准;极少数误判时可临时加-s recursive
遇到冲突后怎么安全解决
冲突不是失败,只是 Git 把选择权交还给你。关键不是“删掉标记”,而是“让 Git 明白你选了哪边”:
-
git status会明确列出Unmerged paths,每行带both modified:—— 这些才是真要改的文件 - 手动编辑时,删掉
<<<<<< HEAD、=======、>>>>>> feature/login及中间内容,只留最终逻辑正确的代码 - 改完必须依次执行:
git add <file>→git commit(不加-m会弹出默认信息)→git push - 漏掉
git add,这个文件就还在“未合并”状态,git commit会报fatal: cannot do a partial commit during a merge - 改完发现不对?立刻
git merge --abort(仅限未commit前)
合并完成后别忘了清理本地分支
合完不删分支,时间一长本地分支列表就会变成垃圾场,而且容易下次手滑又切错:
- 确认已成功推送合并提交后,用
git branch -d feature/login安全删除(Git 会检查是否已完全合并) - 如果提示“not fully merged”,说明还有未合并的提交,别硬删,先
git log --oneline --graph --all看清关系 - 远程分支需单独删除:
git push origin --delete feature/login -
git branch -D是强制删除,绕过安全检查,除非你确定要丢弃未合并的改动,否则别碰
最容易被忽略的一点:git merge 的行为完全取决于 HEAD 当前指向谁——它不看你的直觉,也不读你心里想的“应该合到 main”,只认当前分支指针。每次敲 git merge 前,先 git status 确认一眼,省掉 90% 的返工。

















