记一次git打patch 背景 linux同一个code repo一份再gerrit(public, 公司SCM维护)上一份再gitlab上private我自己维护。因为gitlab上有我private branch我可以方便的同步代码所以我先在gitlab上对应的repo里修改了代码。用git format-patch命令生成了一个.patch文件然后向把这个patch文件打到gerrit对应的那份code repo里。首先使用git am命令发现某一个文件打patch打不上很奇怪我比较了两份code repo里对应的文件两个文件的md5sum完全相同base一样为什么打不上patch呢。没有直接深究先把代码直接复制过去提交到gerrit上。回来揪着AI不断地提问最终找到了答案那个打不上patch的文件用的是windows的换行\r\n, 生成的.patch文件对应的部分虽然依然保留了\r\n,但是在使用git am的时候有一个git mailsplit过程这个过程会把\r\n替换成\n, 之后在git am在查找gerrit对应的那份code里的相应文件的时候就找不到这一段code了导致git am失败。解决办法1使用git am --keep-cr或git config am.keepcr true2使用git apply命令git apply --check 提前做一下check然后直接git apply .patch文件。