Hello, Git!
Learning git branch knowledge.
I love using git rebase, it works well.
同样,我们将 test/conflict2 这条分支推送到远端数据库。
现在,我们的分支情况是这样的
我们先把 test/conflict1 合并到main,因为现在main是无任何改动的,将 test/conflict1 merge 过去是 fast-forward 模式,我们可以很轻松的将它合并到 main 中
$ git checkout main
Switched to branch 'main'Your branch is up to date with 'origin/main'.
$ git merge test/conflict1
Updating 9b83394..949f645
Fast-forward
example.txt | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
$ git push
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/FelixWuu/git_test
9b83394..949f645 main -> main
$ git branch -d test/conflict1
Deleted branch test/conflict1 (was 949f645).
然后,我们再合并 test/conflict2 到 main 分支
$ git branch
* main
master
test/conflict2
$ git merge test/conflict2
Auto-merging example.txt
CONFLICT (content): Merge conflict in example.txt
Automatic merge failed; fix conflicts and then commit the result.
我们可以看到,这次合并是有冲突的,我们在同一个文件下进行了不同的变更。Git 尝试自动解决冲突,但是解决冲突失败了,它提示 Automatic merge failed; fix conflicts and then commit the result. Git 自动合并失败,需要我们手动修复冲突,然后再进行提交。
解决冲突
由于 main 之前合并了test/conflict1 分支,现在,最新的特性已经在 main 分支中,main 分支最新的 commit 是下图中红色的圈
test/conflict2 中的特性会对 main 分支的特性造成影响,它们的差异产生了冲突,我们现在打开 main 分支的 example.txt 文件看看
Hello, Git!
Learning git branch knowledge.
<<<<<<< HEAD
I'm used to merging branches with git merge.
=======I love using git rebase, it works well.
>>>>>>> test/conflict2
$ git status
On branch main
Your branch is up to date with 'origin/main'.
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: example.txt
$ git add .
$ git commit -m "fix: resolve conflicts"[main c970aea] fix: resolve conflicts
$ git push
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 12 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 449 bytes | 449.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/FelixWuu/git_test
949f645..c970aea main -> main
$ git branch -d test/conflict2
Deleted branch test/conflict2 (was 6f30a3f).
现在,git 分支就如下图所示了
你也可以在网页上删除远程分支
用 rebase 合并
我们再做一次上面引入冲突的操作,从 main 上创建两个分支。分别在两个不同的分支上的 example.txt 文件上新增一行不一样的内容,先合并其中一条分支 test/conflict3
$ git branch test/conflict3
$ git branch test/conflict4
$ git checkout test/conflict3
Switched to branch 'test/conflict3'-- 修改 example.txt, 然后提交,就略过不贴上来了 --
$ git checkout main
Switched to branch 'main'Your branch is up to date with 'origin/main'.
$ git merge test/conflict3
Updating c970aea..ad478ee
Fast-forward
example.txt | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
$ git push
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/FelixWuu/git_test
c970aea..ad478ee main -> main
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!