git merge 当整个文件conflict的时候

  1. 1. 背景
  2. 2. Git Merge 之后的差分
  3. 3. fileformat
  4. 4. 后记

背景

啊呀为什么我的pull request里面有整个文件全部conflict了?

仔细看个个commit,明明只是修改了文件中的一部分呀?

Git Merge 之后的差分

假设我们现在branch名为feature,目标branch为master。

为了试着修正conflict,我们试着[feature]$ git pull master

这个时候产生了整个文件的冲突。vim打开冲突文件。我们发现每一行末尾都有^M

但是为什么当我们vim单独打开feature branch下的这个文件的时候,却什么都看不到呢?

fileformat

众所周知不同的os的默认换行是不一样的。

当我们单独打开feature branch下的目标文件,发现其格式为utf-8[dos] 而位于master下面的目标文件,其格式为

utf-8[unix],这个差异造成了我们上述的整个文件的conflict。

解决方法很简单,用vim打开在feature branch下的目标文件。

1
:set fileformat=unix

即可。

后记

不同OS下的换行。

1
2
3
4
5
6
7
LF・・・UNIX
CR・・・MacOS(version 9之前,现在已经不常用)
CR+LF・・・Microsoft Windows

CRLF : ↵
CR  : ←
LF  : ↓
如果你觉得本文对你有帮助,请给我点赞助。