Git变基合并
rebase分支合并
说明
以下 v2
是某个需求的开发分支, dev
是总的开发分支,v2
是基于dev
分支签出的。
当完成v2
的开发后,需要把代码合并到dev
,我们可以使用rebase
进行合并:
1 | # 首先将 v2 push到远程仓库 |
变基要遵守的准则
几个人同时在一个分支上进行开发和提交时,开发中途请不要私自执行变基,只有在大家都完成工作之后才可以执行变基。
变基的实质
变基操作的实质是丢弃一些现有的提交,然后相应地新建一些内容一样但实际上不同的提交。
因此,变基操作过后的分支将不要再使用。
后悔药
1 | # 查看HEAD指针变动记录 |
注意:此操作只能回退当前的分支,如其他分支也要回退,需要切换到该分支并执行上面操作。
开发期间的rebase操作
背景
有两个分支:
1 | dev |
v2
是基于dev
切出来的。
提交记录如下:
1 | dev |
开发期间,两个分支同时有新的commit :
1 | dev |
当前你正在v2
进行开发,dev
也同时进行开发,并有重大的改变,你需要把dev
的提交同步到v2
。
需求: 把dev
中新的提交同步到v2
,且不能影响dev
分支。
操作步骤
基于最新的
dev
切一个新的分支dev-copy
dev-copy
和dev
两者的 commit ID 一致。在
dev-copy
中执行rebase,将dev-copy
的提交变基到v2
1
git rebase v2 # 将 dev-copy 的提交[commit] 变基到(应用到) v2
删除原
v2
分支,将dev-copy
分支名改为v2
1
2
3# 当前在 dev-copy 分支
git branch -d v2 # 删除分支
git branch -m dev-copy v2 # 重命名
git cherry-pick
用于将单个或几个[commit]
复制到另一个分支。
基本应用
1 | git cherry-pick <commitHash> # 将commitHash应用于当前分支 |
上面命令就会将指定的提交commitHash
,应用于当前分支。这会在当前分支产生一个新的提交,当然它们的哈希值会不一样。
git cherry-pick命令的参数,不一定是提交的哈希值,分支名也是可以的,表示转移该分支的最新提交。
转移多个提交
Cherry pick 支持一次转移多个提交。
1 | git cherry-pick <HashA> <HashB> # A和B提交 |
上面的命令将 A 和 B 两个提交应用到当前分支。这会在当前分支生成两个对应的新提交。
如果想要转移一系列的连续提交,可以使用下面的简便语法。
1 | git cherry-pick A..B # A到B提交,不包含A |
上面的命令可以转移从 A 到 B 的所有提交。它们必须按照正确的顺序放置:提交 A 必须早于提交 B,否则命令将失败,但不会报错。
注意,使用上面的命令,提交 A 将不会包含在 Cherry pick 中。如果要包含提交 A,可以使用下面的语法。
1 | git cherry-pick A^..B # A到B提交,包含A |