Merge Or Rebase

Merge Or Rebase

都具备分支间变更的能力:但是二者间实现手段大不相同

1. 实现手段

Merge(总是向前推进提交历史,并不会影响提交的原始状态)

我们在特性分支上,执行

# git 会以 我方、对方、以及双方最近公共祖先 对应的快照 ===> 执行三路合并生成新的快照
git merge master


三路合并生成新的快照

并基于此快照,创建一个连接 特性分支 feature 和 主干的合并节点

最后调整特性分支的指向

Rebase(整合变更,对提交历史进行重写)

我们在特性分支上,执行

# 1. git 会从双方最近的公共祖先开始,将特性分支每个提交对应的变更暂存起来,
# 2. 然后以主干分支指向的提交 为新起点,将暂存的变更按顺序,一一 还原成新提交
git rebase master
  1. git 会从双方最近的公共祖先开始,将特性分支每个提交对应的变更暂存起来,
  2. 然后以主干分支指向的提交 为新起点,将暂存的变更按顺序,一一 还原成新提交

    此时,特性分支的新起点,就像是从 C1 迁移到了 C6

2. 异同点

同

内容完全一致

异

二者却构建出了迥异的提交的历史

3. 日常开发中经常遇到的例子【开发者从 feature 发起 PR】

由于 master 分支也合入了新的提交,在 PR 中显示,feature 分支和主干间存在冲突而无法合并,此时开发者通常有2 种方式解决冲突问题

将 master 分支 merge 到 feature 分支,并在合并时解决冲突

这样做会在方法方法会在 feature 分支中引入一个合并提交(包含解决冲突所做的修改)

将 feature 分支 rebase 到 master 的最新提交,并在 rebase 过程中解决冲突

4. 交互式 Rebase【提交的重排、压缩、拆分、丢弃】

git rebase -i master

顺序调整

squash 命令(实现对提交的压缩)

drop 指令

5. rebase -i 综合应用

6. 注意点

Git rebase 在重设基线,修整历史的过程中,会产生新的提交替换老提交,谨记:
千万不要使用 rebase 处理已经被其它协作者引用的提交

posted @ 2024-05-05 18:30  爱新觉罗LQ  阅读(60)  评论(0)    收藏  举报