分支提前判断存在冲突的两种方案

git命令

  1. 找到两个分支之间最好的公共祖先base_sha

    base_sha = git merge-base origin/{source} origin/{target}
  2. 通过`git merge-tree {base_sha} {source} {target}`获取合并后的结果

    git merge-tree {base_sha} origin/{source} origin/{target}
  3. 如果输出有`changed in both`字样,那说明存在冲突

借助GitLab Api判断

  • 示例代码如下

    # 检查合并冲突,借助gitlab的发起mr来判断
      def checkConflicts(self, source, target, title):
        mr = self.createMr(source, target, title, None)
        if mr is None:
          return False
        elapsed = 0
        while True:
          mr = self.getMr(mr.iid)
          status = mr.merge_status
          if status == 'can_be_merged':
            self.deleteMr(mr)
            return False
          if status in ['cannot_be_merged', 'cannot_be_merged_recheck']:
            self.deleteMr(mr)
            return True
          if elapsed > 30:
            self.deleteMr(mr)
            return True
          elapsed += 3
          time.sleep(3)