工具

vimdiff

配置

git config merge.tool vimdiff  # 指定vimdiff作为默认mergetool
git config merge.conflictsytle diff3  # 设定mergetool风格
git config mergetool.prompt false  # 取消打开文件时的warning显示
git config mergetool.keepBackup false # 设置禁止生成orig
  • 此为本地配置,若要全局配置加上--global

使用

  • git mergetool

界面

  1. 出现四个窗口
  2. 从左到右分别为
    1. 当前分支内容local
    2. 两个分支共同祖先内容base
    3. 要合并分支内容remote
  3. 下面为修改的窗口

修改

  1. 直接修改
  2. 命令修改
:diffg RE  " get from REMOTE
:diffg BA  " get from BASE
:diffg LO  " get from LOCAL
  1. 下一个冲突(]c)

退出

  • :wqa 如果还有文件会继续自动打开下一个

lazygit

  • 使用<space>进入选择,j/k上下移动,<enter>选择

冲突解决

起merge分支

优点

  1. 通用,无论是test环境出问题还是master都可以使用
  2. 提交记录整洁

缺点

  1. 太麻烦和繁琐了,涉及到很多分支,到时候需要一个一个删除

rebase大法

  • 具体原理参考gitothers > Rebase
  • 相当于冲突的分支rebase到master当前上(这个只能用于没有推送到远程分支情况下,不推荐)
git rebase master # 此时在自己的分支上

优点

  1. 提交记录整洁
  2. 操作简单

缺点

  1. 只能在master使用,不能在test上使用(会出大问题,因为本来是基于master的)
  2. 这个只能用于没有推送到远程分支情况下,不推荐

直接merge大法

  • 当分支出现冲突的时候,直接将merge master
git merge master # 此时在自己的分支上

优点

  1. 和rebase底层原理是一样的,因此也有操作简单

缺点

  1. 只能在master使用
  2. 提交记录会变得诡异,自己的log和master的log合并了

直接修改冲突

  • 直接在test分支上解决冲突然后直接commit

优点

  1. 简单方便

缺点

  1. 只能在test实现,不能在master操作
  2. 很容易导致直接在test分支开发的坏习惯

总结

  • 如果需要统一解决方式
    • 使用merge分支是最统一的
  • 如果需要最简单快速
    • master 分支merge master
    • test使用直接修改大法