# Merge

TIP

git merge -s <策略名字>

merge

  • 使用git merge来做分支合并。
  • master分支合并到feature分支上,会新增一个commit节点来记录这次合并
  • Git会有很多合并策略,其中常见的是Fast-forwardRecursiveOursTheirsOctopus
  • 默认Git会帮你自动挑选合适的合并策略,如果你需要强制指定,使用git merge -s <策略名字>

# three-way-merge

  • 二向合并,git不知道怎么合并
    merge
  • 三项合并
int ll_merge(mmbuffer_t *result_buf,
         const char *path,
         mmfile_t *ancestor, const char *ancestor_label,
         mmfile_t *ours, const char *our_label,
         mmfile_t *theirs, const char *their_label,
         const struct ll_merge_options *opts)

merge

  • 自动帮合并这两个文件为 Print(“hello”)
  • 复杂点,出现冲突 merge

# Recursive-three-way-merge

  • 递归寻找路径最短的唯一共同祖先节点,然后以其为base节点进行递归三向合并
  • B和A待合并,往上走A是两个的共同祖先,确定A为base,B为修改commitB 02
  • 但更复杂的时候,Git在寻找路径最短的共同祖先节点时,如果满足条件的祖先节点不唯一,那么Git会继续递归往下寻找直至唯一
  • Git只是使用这些策略尽量的去帮你减少冲突,如果冲突不可避免,那Git就会提示冲突,需要手动解决

# Fast-forward

  • Fast-forward是Git在合并两个没有分叉的分支时的默认行为 02
  • 将master分支的指向移动到最后一个commit节点上 03

# Ours & Theirs

  • ours 当前
  • git merge -s ours dev 03
  • theirs 需要被合并的分支
    • 使用theirs则完全相反,完全抛弃掉当前分支的文件内容,直接采用对方分支的文件内容。

# Octopus

  • git merge两个以上分支时的默认行为
  • 用一个合并节点将两个以上的commit全部合并进来
  • dev1分支上执行git merge dev2 dev3 03
Last Updated: 2021/11/8 下午4:01:05