Git冲突分为哪几种情况?常用解决办法

摘录

原文:https://www.it610.com/article/1304846442027847680.htm

1.本地拉取

  • 当远端有更新,本地库没有有变化,拉取操作远端会覆盖本地库(远端版本高于本地)
  • 当远端修改,本地库也有修改,拉取操作会产生冲突文件(远端版本和本地版本冲突)
  • 当本地库修改,而远端没有变化,拉取不会产生变化(本地版本高于远端版本)
  • 当本地库版本低于远端版本,则无法推送,必须先拉取在操作,否则报错

分支合并:

  • 当资源分支版本高于目标分支时,合并,资源分支同名文件会覆盖目标分支;
  • 当目标分支版本高于资源分支时,合并,提示Already up-to-date.(已经更新),目标分支内容不会变化;
  • 当目标分支和资源分支同名文件都有改动时,会报冲突,需手动解决;  --

避免合并冲突方案:

如果目标分支(例如master)被保护起来,其他分支只能通过发起mergeRequest合并请求来合并的话,目标分支的版本始终是低于资源支的,也就不会产生冲突文件了,这样既达到了保护重要分支的目的,也解决了合并冲突的问题。

2022-07-11

https://www.it610.com/article/1304846442027847680.htm

1.回顾

项目刚刚开始,没多少文件,只有大概的架子。因为需要重新配置一下打包工具,所以先把以前配置好的仓库拉下来了,再把现有的这个仓库的一些文件和修改的地方手动合并到了这个模板仓库。然后又想着往项目仓库推送修改好的文件。

然后fetch、merge 报错了,如下:

fatal: refusing to merge unrelated histories

然后无视,强行合并:

git merge merge --allow-unrelated-histories

一堆冲突。

2.分析

有两个仓库参与了本次事件,重新理解一下仓库,仓库是众多版本的集合。两个不同的仓库就算是当前版本文件是一致的,他们的历史是不一致的,强行把一个仓库覆盖到另一个仓库,结果就只有冲突了。

3.解决

应该在当前项目的仓库上进行修改,把模板仓库的内容copy,修改到项目仓库,再把修改好的版本push,问题解决。