likes
comments
collection
share

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

作者站长头像
站长
· 阅读数 9

一. 冲突是如何产生的

我们都知道,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 文件。

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

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

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

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

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

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

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

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

2. 创建一个分支

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

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

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

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

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

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

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

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

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

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

使用 git checkout master 切换到主分支

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

修改 test.txt 中的内容:

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

再执行以下代码:

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

然后合并之前的 develop 分支:

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

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

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

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

4. 解决冲突

右键冲突的文件,然后选中解决冲突,点击使用我的版本或使用他人版本解决冲突(选择我的版本即使用当前所在分支的内容,他人版本即使用要合并过来的内容)。 代码冲突是如何产生的以及如何解决冲突

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

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

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