欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

代码冲突是如何产生的以及如何解决

最编程 2024-05-03 21:30:28
...

一. 冲突是如何产生的

我们都知道,Git 的本质就是一个树。比如有一个节点树(node0),

我们基于 node0 进行开发,开发出了结点 node1;
我们基于 node0 进行开发,开发出了结点 node2;
如果我们在 node1 和 node2 内操作了同一个文件的同一个位置,那么势必会导致冲突产生。

文件:test.txt

HelloWorld!

甲 更新了版本2:

HelloJavaScript!

乙 更新了版本3:

HelloVue!

场景如下,甲乙都是基于 test.txt 文件开发的。甲开发出了版本2,并且提交了代码;乙开发出了版本3,也需要提交了代码,此时将会报错存在冲突。

为什么呢?因为甲开发完版本并提交后,此时远端的代码已经是版本2的代码了,而乙是基于版本1进行的开发出了版本3。所以,乙想要提交代码,势必要将自己的代码更新为版本2的代码,然后再进行提交,如果存在冲突则解决冲突后提交。

二. 如何解决冲突

1. 首先创建一个文件夹(fix-conflict),并在这个文件夹里添加一个 test.txt 文件。

1.png

并往这个文件里添加点东西:

2.png

接着执行 git 最基本的三个指令:git init、git add .、git commit -m 'xxx'

3.png

提交后我们可以通过 git status 查看当前状态:

4.png

OK,没有要提交的内容了,工作树现在很干净。

2. 创建一个分支

为了能产生冲突,我们需要创建一个分支,执行 git checkout -b develop 来创建一个名为 develop 的分支并检出它。

5.png

接着修改 test.txt 文件中的内容:

6.png

执行 git status 看看这时的状态:

7.png

显然,我们上次的修改还没放入暂存区,执行 git add . 后再执行以下命令:

8.png

OK,这个分支的工作树也干净了。

3. 切换到主分支,修改内容后合并

使用 git checkout master 切换到主分支

9.png

修改 test.txt 中的内容:

10.png

再执行以下代码:

11.png

然后合并之前的 develop 分支:

12.png

完美,冲突出来了。我们可以打开 SourceTree 然后导入对应的文件,就可以看到冲突了(也可以用常见的代码编辑器来查看,比如 VSCode)

13.png

上图中右边的 HEAD 表示所指示的版本(也就是你的 master 分支所在的位置,因为你在运行 merge 命令的时候已经检出到了这个分支)在这个区段的上半部分(======= 的上半部分),而 develop 分支所指示的版本在 ======= 的下半部分。 为了解决冲突,你必须选择使用由 ======= 分割的两部分中的一个,或者你也可以自行合并这些内容。

4. 解决冲突

右键冲突的文件,然后选中解决冲突,点击使用我的版本或使用他人版本解决冲突(选择我的版本即使用当前所在分支的内容,他人版本即使用要合并过来的内容)。 14.png

然后在下方白色框中输入本次你合并做了什么事,之后点击提交:

16.png

Ok,以上就是有关冲突是怎么产生的以及如何解决冲突的问题。

推荐阅读