git解决冲突 merge 不提示_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,所以出现了冲突,

修改一下,然后提交就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值