侧边栏壁纸
  • 累计撰写 83 篇文章
  • 累计创建 87 个标签
  • 累计收到 9 条评论

目 录CONTENT

文章目录
Git

Git学习-分支冲突

汤圆学Java
2022-06-20 / 0 评论 / 0 点赞 / 19 阅读 / 2,571 字
温馨提示:
本文最后更新于 2022-06-20,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

前言

前面我们介绍了分支的相关操作,包括创建、切换、查看、合并、删除等操作;

但是合并分支时,可能会出现合并冲突,比如多个分支改了同一个文件;

本篇就介绍下怎么解决分支的合并冲突。

目录

  1. 创建Git项目
  2. 在master主分支更新文件
  3. 在dev分支更新同一个文件
  4. 尝试将dev分支合并到master主分支
  5. 在master主分支修改冲突的文件

正文

1. 创建Git项目

创建并进入目录 branch-demo;

对目录进行git初始化: git init 初始化

PS D:\branch-demo> git init
Initialized empty Git repository in D:/branch-demo/.git/

添加远程仓库地址:git remote add origin git@github.com:YourUserName/git-branch-demo.git

创建一个demo.txt文件,编辑内容然后提交:

PS D:\branch-demo> git add .\demo.txt
PS D:\branch-demo> git commit -m "hello"
[master (root-commit) b2ce186] hello
 1 file changed, 1 insertion(+)
 create mode 100644 demo.txt
PS D:\branch-demo> git push origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 209 bytes | 69.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:Jalon2015/git-branch-demo.git
 * [new branch]      master -> master

创建分支dev: git branch dev

现在的示意图如下所示:

image-20211111181230311

2. 在master主分支更新文件

现在我们有了一个git项目,有两个分支master、dev,有一个文件demo.txt;

现在我们开始制造冲突;

先在master主分支更新文件demo.txt,更新后的内容如下所示:

1 hello

然后我们提交变更: git add -A; git commit -m "update demo.txt"

PS D:\branch-demo> git add -A
PS D:\branch-demo> git commit -m "update demo.txt"
[master 9d891b6] update demo.txt
 7 files changed, 81 insertions(+)

示意图如下所示:可以看到,master前进了一步,但是dev还在原地

image-20211111181431120

3. 在dev分支更新同一个文件

下面我们切换到dev分支:git switch dev,切换后 Head 就会指向 dev 分支

PS D:\branch-demo> git switch dev
Switched to branch 'dev'

再次修改demo.txt,修改后的内容如下:

2 hello

提交到dev分支:git add -A; git commit -m " update demo.txt again"

PS D:\branch-demo> git add -A
PS D:\branch-demo> git commit -m "update demo.txt again"
[dev 56659d5] update demo.txt again
 2 files changed, 71 insertions(+), 1 deletion(-)
 create mode 100644 .idea/workspace.xml

示意图如下所示:可以看到,master和dev分别指向不同的节点,那么此时合并就会有冲突,下面我们就试着合并

image-20211111181948894

4. 尝试将dev分支合并到主分支

一般的习惯都是将dev合并到master,所以这里我们先切换到master分支:git switch master

然后执行合并命令:git merge dev

PS D:\branch-demo> git merge dev
Auto-merging demo.txt
CONFLICT (content): Merge conflict in demo.txt
Automatic merge failed; fix conflicts and then commit the result.

不出所料,合并冲突了;

解决办法就是修改冲突的文件,这里我们在编辑器中能看到如下所示的界面:demo.txt

<<<<<<< HEAD
1 hello
=======
2 hello
>>>>>>> dev

上面的<<<<<<< HEAD就是当前master分支修改的内容;

上面的>>>>>>> dev就是dev分支修改的内容;

上面的=======用来将分支区分开。

5. 在主分支修改冲突的文件

现在我们在主分支,如果修改内容的话,也只会影响到主分支,dev分支不受影响;

我们来修改demo.txt的内容:

new hello

然后提交: git add -A; git commit -m "solve conflict"

PS D:\branch-demo> git add -A
PS D:\branch-demo> git commit -m "solve conflicts"
[master 491b8df] solve conflicts

提交之后,我们再次合并:git merge dev

PS D:\branch-demo> git merge dev
Already up to date.

可以看到,这次合并成功了

示意图如下所示:master将dev合并之后,dev还是在原地,这个时候dev分支已经没用了,我们直接删除git branch -d dev

image-20211111182939688

总结

如果合并分支时出现了冲突,解决办法就是查看冲突文件,根据提示进行修改;

修改后再次提交,合并即可

0

评论区