0%

终止合并

可以用 git merge --abort,就不要用 git reset --hard 了。

合并的时候忽略空白字符

git merge 时加入参数 -Xignore-all-space or -Xignore-space-change

最好还是不用,因为这样容易出现混合的换行方式(\n\r\n)。

手动 re-merging

讲的是 git merge-file 的用法。和手动修改相比,这样做更容易脚本化,因为很多命令行工具只能对没有 conflict markers 的源码处理。

首先,冲突已经发生。我们获取冲突文件的三个版本:

https://git-scm.com/book/en/v2/Git-Tools-Rerere

rerere 的一些性质

rerere 没有默认开启。

rerere 是在前一步骤合并冲突,生成了含有冲突 markers 的文件之后,根据记录的结果重新应用冲突解决方案的。因而可以手动对冲突了的文件(通过 git checkout --conflict=merge -- <files> 创建)应用 git rerere

rerere 可以自动解决冲突,但是解决过程发生在冲突之后,也不会自动提交,因此 rerere 在实现上更像一个钩子。这样也可以给使用者再次检查的机会。解决冲突之后把 unmerged paths 加入到 index,然后用 git commit 或者 git rebase --continue 来确认。

rerere 的缺点

rerere 不知道什么合并方式是正确的、什么是错误的,因而会一律记录下来。比如有时候合并错误需要退回,这个时候重新合并,rerere 就会用错误的方式解决冲突。使用 git rerere forget <pathspec> 可以让 rerere 删除错误的合并方式,将 <pathspec> 换成 . 就是删除本文件夹的所有冲突解决方式(注意当前是否在 git 仓库的根目录)。见 https://stackoverflow.com/questions/5519244/are-there-any-downsides-to-enabling-git-rerere

一些需要弄明白的名词:commit range/refspec。

git 基础

git 的管理方式是记录每个文件的快照。

然后分成三个区: