git分支学习笔记2-解决合并的冲突
来源:https://www.liuhaolin.com/git/115.html
git中合并冲突是在不同的分支中同一个文件的内容不同导致的,如果进行合并就会冲突。文件可能是新增的文件,比如在两个分支中都新建了同一个文件,但是他们的内容不同,或是在两个分支中都更新了同一个文件,但是更新的内容不同。最终导致同一文件在不同的分支中内容不同。如果需要进行合并,就必须人工解决冲突,或者撤销合并。
"创建一个有冲突的合并"
git解决冲突示例
初始化一个仓库,然后创建一个 dev
分支,分支里添加一个文件 master-dev.txt
,然后提交到 dev
分支。切换到 master
分支,同样的操作也是提交了同一个文件master-dev.txt
,同样提交到master 分支中,但是这两个文件的内容是不同的。如果想把 dev
的分支提交到master
中,代码就会有冲突。
创建“冲突”
echo "测试-代码提交冲突" > README git init . git add . git commit -m 'init' # 创建一个 dev 分支,并切换到dev分支 git checkout -b dev # 当前的分支 dev git branch #* dev # master echo "dev" > master-dev.txt # 在dev分支中提交 git commit -m '[dev branch ]add file master-dev.txt' git checkout master echo "master" > master-dev.txt git add . git commit -m '[master branch ]add file master-dev.txt'
把dev分支的代码合并的master中,看看什么情况。
# 把 dev分支的代码合并到当前的分支,也就是 master 分支中 git merge dev #自动的合并文件 master-dev.txt Auto-merging master-dev.txt # 提示了冲突, 合并冲突在 master-dev.txt CONFLICT (add/add): Merge conflict in master-dev.txt # 自动合并失败, 修改一个冲突,然后提交结果 Automatic merge failed; fix conflicts and then commit the result.
出现了冲突,这是时候 master-dev.txt
的内容会被修改,会把两个分支中的文件内容都 汇集 master-dev.txt 文件中。
1 2 3 4 5 6 | cat master-dev.txt <<<<<<< HEAD master ======= dev >>>>>>> dev |
需要注意的地方是,产生了冲突,并且当前的文件 master-dev.txt
被修改了。这个时候,只能是先解决冲突。再进行下一步操作。比如想看一下 dev分支
中的文件 master-dev.txt
的内容是否也被修改了,这个时候看不了,因为要先解决冲突。事实上,出现冲突的时候,是不能切换分支的。这样有个好处就是,就是防止有问题的代码污染了其他的分支。
1 2 3 4 | git checkout dev master-dev.txt: needs merge # 必须先解决当前的索引区的冲突 error: you need to resolve your current index first |
解决代码合并中的冲突
git使用 7个左键箭头 + 当前分支,7个等号和7个右箭头 + 当前分支 来表示冲突的代码,一共是三行。解决冲突就是修改代码后,并删除这三行。比如本次的修改就是删除这三行。
1 2 3 | cat master-dev.txt master dev |
修改后看下当前的状态
1 2 3 4 5 6 7 8 9 10 11 12 13 | git status On branch master # 存在没有合并成功的部分 You have unmerged paths. # 修正错误,并提提交 (fix conflicts and run "git commit" ) # 使用 git merge --about 终止合并 (use "git merge --abort" to abort the merge) # 没有合并的文件 Unmerged paths: (use "git add <file>..." to mark resolution) both added: master-dev.txt |
修改了冲突的文件,冲突并没有得到解决 ,因为文件并没有提交。没有继续合并,或者撤销合并。所以依然不能切换分支的。
1 2 3 | git checkout dev master-dev.txt: needs merge error: you need to resolve your current index first |
这里进行提交一下看看结果。
1 2 3 4 5 6 7 8 9 10 11 12 | git add master-dev.txt git commit -m 'both commit' # 当前的分支是 master cat master-dev.txt master dev # 切换到dev分支 cat master-dev.txt dev # 可以看到dev分支的内容换是原来的内容,并没有改变。 |
这样就合并了有冲突的分支, 现在有一个问题,就是 dev分支的内容和 master分支的内容是不同的。如何同步能?
1 2 3 4 5 6 7 8 9 10 | # 在dev分支中,更新master中的内容 git rebase master #First, rewinding head to replay your work on top of it... #Fast-forwarded dev to master. # 这个表明,现在 dev分支的内容和master分支的内容是一致的。 cat master-dev.txt master dev |
本文来自博客园,作者:飞龙在生,转载请注明原文链接:https://www.cnblogs.com/flzs/p/11302559.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!