Git 分支合并冲突怎么办?按这 4 步顺序处理

Git 分支怎么用,真正的门槛不在敲命令,而在合并那一下弹出冲突的时候。冲突不是出错,是 Git 把「这几行该留谁的」交回给你决定。顺序只有四步:看清状态、改文件删标记、git add 标记已解决、提交收尾。慌的时候先记住一句:提交不会丢,能退。

Git 分支怎么用:先跑通 3 个基本动作

  • 建分支并切过去:git switch -c feature-login。Git 2.23 之后用 switch,老版本写 git checkout -b feature-login。做完敲 git branch,新分支前面会出现 *。
  • 切回主分支:git switch main。切之前先 git status 看工作区是否干净,有未提交的改动会被一起带过去。
  • 合并:站到目标分支上再合,顺序别反。先 git switch main,再 git merge feature-login。

想看分支怎么分叉、在哪合上的,敲 git log --oneline --graph --all,排查冲突时这张图最直观。分支命名建议加前缀,feature/ 放新功能、fix/ 放修问题,隔一周也能看懂。

Git 分支合并冲突怎么办:4 步顺序别搞反

冲突只发生在同一个文件的同一段位置被两个分支都改过的时候。改的是不同文件,或同一文件的不同行,Git 会自己合,你连提示都看不到。判断方法很简单:敲 git status,看到 both modified: 文件名 就是冲突。

  1. 在 git status 里先挑一个冲突文件处理,别一次开十个。
  1. 用编辑器打开它,搜 <<<<<<<。<<<<<<< HEAD 到 ======= 之间是当前分支的版本,======= 到 >>>>>>> 是合进来的版本。删掉这三行标记本身,保留你要的内容,两边都要就都留着。
  1. 保存后执行 git add 文件名,把它标记成已解决。不做这一步,Git 不认。
  1. 所有冲突文件都 git add 完,执行 git commit,默认信息是 Merge branch ...,直接保存就行。

中途不想合了,git merge --abort 一步回到合并前,什么都不会变。还剩几个文件没处理,看 git status 里 Unmerged paths 那一段。

Git 分支合并冲突时文件中的冲突标记示意图
冲突文件里三组标记的含义:哪段是当前分支、哪段是合进来的

三种收尾方式:merge、rebase 还是放弃

  • merge:最稳,保留真实历史,适合多人共用的 main 和团队分支。
  • rebase:把你的提交搬到目标分支后面,历史是一条直线。适合还没推送出去的本地分支。冲突改完要 git add 再 git rebase --continue,想退出用 git rebase --abort。
  • 放弃:改动不要了就 abort 回到原点,比手动删文件干净。

一句判断标准:这个分支已经推给别人用过,就别 rebase 改写历史,直接 merge。

4 个最容易踩的坑

  1. --ours 和 --theirs 记反。在 merge 里,--ours 是你当前所在的分支,--theirs 是合进来的那个;rebase 里两者含义正好相反,用之前先确认自己在哪。
  1. 收尾时敲 git add . 一把梭,把依赖目录、临时文件一起提交了。提交前用 git status 过一眼。
  1. 直接在 main 上改代码。改动一律先开分支,回退和排查都省事。
  1. 对共享分支执行 git push -f。这会覆盖别人的提交,只有确认这个分支只有自己在用才用。

顺带说清免费边界:Git 本身免费开源,托管平台的免费私有仓库额度各家不同,够不够用去看官方页面当下的政策。

常见问题(FAQ)

合并冲突会把代码弄丢吗?

不会。冲突只是让你手动挑内容,两边的提交都还在。想全退用 git merge --abort;就算误操作了,git reflog 能翻出之前的提交记录,再 git reset 回去。

git switch 和 git checkout 有什么区别?

git switch 只管切换和新建分支,是 Git 2.23 之后新增的,语义清楚;git checkout 还能还原文件、切到某个提交,功能混在一起容易误操作。新手记两个就够:switch 管分支,restore 管文件。

冲突文件太多,能直接用别人的那一版吗?

可以。git checkout --theirs 文件名 取合进来那版,--ours 取当前分支那版,取完还要 git add。整仓库一把取之前,先确认你没有必须保留的本地改动。

合并完的分支能删吗?

能。git branch -d 分支名 只删已经合并进当前分支的,没合并会被 Git 拦下;确认不要了再用 -D 强删。远端分支要另外删。把上面这些动作跑顺,Git 分支怎么用这件事就不用再靠猜了。

最后更新:2026-10-11(Git 命令与托管平台免费政策可能调整,请以官方文档为准)。

Git 分支合并 merge 与 rebase 历史线对比图
merge 保留分叉,rebase 拉成一条直线

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...