本地功能分支合并前必须确保工作区干净、目标分支已同步最新、功能分支已合并目标分支以提前解决冲突,并通过 git diff 检查差异。

本地功能分支必须先提交干净
没提交的修改会卡住后续所有合并操作——Git 拒绝在有未提交变更时执行 git merge 或 git rebase。常见报错是 error: Your local changes to the following files would be overwritten by merge。
- 运行
git status确认输出为nothing to commit, working tree clean - 若有修改,要么
git add . && git commit -m "xxx"提交,要么用git stash暂存(后续可git stash pop恢复) - 特别注意:被 Git 忽略但实际存在的文件(如本地配置、日志文件),若与目标分支同名,也会触发冲突;建议提前
rm或mv移走
必须先同步目标分支最新状态
跳过这步,轻则引入重复冲突,重则覆盖他人已合入的代码。不是“我本地 develop 没改就不用拉”,而是“别人可能刚 push 了新提交”。
- 切到目标分支(如
develop或main):git switch develop - 拉取远程最新:
git pull --rebase origin develop(--rebase避免生成无意义的 merge commit) - 如果本地该分支有未推送的提交,
git pull --rebase会把你的提交“重放”在远程最新基础上,比普通git pull更干净
推荐在功能分支上先合并目标分支
这不是必须步骤,但能提前暴露并解决冲突,避免 MR/Merge Request 被阻塞。尤其适合多人高频提交的 develop 分支。
- 切回你的功能分支:
git switch feature/login - 执行:
git merge develop(或git rebase develop,后者更线性但会改写提交 SHA) - 手动解决冲突后,
git add+git commit,再推送到远程功能分支 - 这样做的好处:冲突在你自己的分支上解决,不影响主干,也方便 Code Review 时看到“已解决冲突”的明确提交
检查 diff 再执行 merge
别直接 git merge feature/x 就完事。合并前看一眼到底要进什么,能避开很多低级错误,比如误合测试代码、漏删调试语句。
- 确认当前在目标分支(如
develop)后,运行:git diff develop...feature/login(三个点,比较两分支最新提交间的差异) - 重点关注:新增/修改的业务文件、删掉的配置项、变动的依赖版本(
package.json/pom.xml) - 如果 diff 太大或包含意外内容(比如整个
node_modules被提交),说明功能分支没清理干净,得先回退处理











