git merge 冲突解决


git merge 冲突解决

背景

git 现在已经成为我们日常生活中普遍的工具了,其实有时候还是有一些疑问的,毕竟很多东西即使你之前学过了,当你用的时候还是有点不确定,一般我都会在本地做一下测试,避免给生产环境的 git 代码库带来问题, 毕竟这决定了你一个人的态度。

补充

我们都知道 git 是一个分布式的代码管理工具,因为是分布式每个人都可以在自己的本地仓库进行操作以及提交,最后可以 push 到 remote repository。但是我们在 push 之前,应该 pull 一下,因为如果有相同的文件修改了会出现问题,其实 git pull 这个操作还是不太好的,因为他不够直观

git pull 

git fetch
git merge

git fetch 会把此分支上面所有的更新拉下来,但是没有和本地的 Head 分支进行和合并。
如果执行 git fetch 后再去执行 git merge 就会把更新的部门和当前的 Head 进行合并,如果有冲突就会产生冲突文件,然后把冲突文件修改一下就可以了。

探索

我们用本地的一个仓库去模拟一下 git merge 产生冲突时候的情况。

git init 
echo "master" > info.txt
git add .
git commit -m "master"

git branch issue1 
git branch issue2

这里要注意点,这两个分支都是从 master 分支产生的,此时这三个分支都是在一个点,对于 git 来说,这三个分支的指针是一样的,这里需要支出的是 HEAD 指的就是当前的分支,每当我们 git checkout 分支的时候,HEAD 也会自动的修改指向切换后的分支。
我们可以这样去查看 HEAD:

cat .git/HEAD

ref: refs/heads/master

接下来进入正题,首先切换到 issue1 分支:

git checkout issue1
echo "issue1" >> info.txt
git add .
git commit -m "issue1"


[issue1 4e5bb48] issue1
 1 file changed, 1 insertion(+)

然后切换到 issue2:

git checkout issue2
echo "issue2" >> info.txt
git add .
git commit -m "issue2"


[issue2 bcf0fb0] issue2
 1 file changed, 1 insertion(+)

然后我们再切换到 master 分支把 issue1 和 issue2merge 到 master 分支, 不过在我们 merge 之前我们想思考一下,假设我们先 merge issue1 分支,然后再 merge issue2 分支会出现什么样的结果呢?

因为 issue1 和 issue2 都是从 master 分支创建出来的,所以 master 分支 merge issue1 的时候是可以成功的,因为在 master 分支在 merge issue1 的时候,master 分支并没有改动过,但在 master merge issue2 的时候,就会有问题,因为此时 master 以及修改了,而且修改的地方还都存在冲突,冲突就是第二行。

master 合并 issue1 分支:

Updating e84213a..4e5bb48
Fast-forward
 info.txt | 1 +
 1 file changed, 1 insertion(+)

上面的 Fast-forward 指的就是把 master 当前的指针直接移动到 issue1 也就是master 此时和 issue1 指向一个位置。

master 再合并 issue2 分支:

Auto-merging info.txt
CONFLICT (content): Merge conflict in info.txt
Automatic merge failed; fix conflicts and then commit the result.

从上面可以看出,出现了冲突。

cat info.txt

master
<<<<<<< HEAD 
issue1
=======  
issue2
>>>>>>> issue2

因为第二行出现了冲突, master merge issue1 后第二行为 issue1
然后此时 merge issue2 的时候 第二行为 issue2,所以出现了冲突,
修改一下,然后提交就可以了。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM