如何使用git merge 一系列的commits

先来说说 git 所保存的对象。对于 git 来说, commits ,文件, branches 都是一些对象。 commits 保存的是一些文本文件之间 diff (只对文本文件来说)。所谓的 merge 就是把那些 diff 在某些 commit 点上面重播( replay )一次。

可是 git merge 没有直接 merge 一系列 commits 的功能。对于一个 commit ,我们可以使用 cherry-pick 来把那个 commit replay 到其它 commit 点上面。对于一系列的 commit ,这样做很麻烦,假如发生冲突麻烦更加大,你必须记住在 replay 到哪个 commit 的时候发生冲突,解决完之后还必须到跳过那个 commit 继续 cherry-pick

git rebase 能达到此目的。它和 merge 的不同之处在于 merge 是在历史记录分开的时候那个点开始重播的,而 rebase 是保存好在 upstream 没有的 commits ,然后把那些 commits 重播在新的 base 点上。

假设要把 branches A commit c-d (从 a-f merge branch B 有两种方法:

方法一:首先用从 A 创建新的分支 A1 ,用 branch –f d 去除 commit  e f ,然后用 rebase 去除 commit a b (详情见 rebase --help )。然后把 branch B rebase branch A1

方法二:首先从 A 创建新的分支 A1 ,用 branch –f d 去除 commit  e f 。然后用 rebase –onto B b A1 A1 “嫁接”( transplant )到 B 上。

方法一方法二的区别在于 c-d 应用的位置不同,方法一会出现在 B 的最前面;方法二相反。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值