举杯邀月

git 从a分支上提取某几次提交合并到b分支上的方法 cherry-pick

摘要:cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作。例如,假设我们有个稳定版本的分支A,另外还有个开发版本的分支B,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个 A 中的功能到 B 中,就可以使用cherry-pick

cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作。例如,假设我们有个稳定版本的分支A,另外还有个开发版本的分支B,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个 A 中的功能到 B 中,就可以使用cherry-pick

查找提交的commitID

首先我们在 A 分支中找到要合并的commitId,通过git log命令查看历史提交记录并复制commitId

$ git log
commit a86fa61c13df652c0dd9c00d2135c43b575c258a
Author: injurys
Date:   Thu May 7 16:27:15 2020 +0800

    4

commit 98fdf8d5a0fec98acafde1ed9e3d29a11f3b145d
Author: injurys
Date:   Thu May 7 16:26:29 2020 +0800

    3

commit 8d01919da93393930839a64a86033440b3e648b4
Author: injurys
Date:   Thu May 7 16:26:10 2020 +0800

    2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

切换分支并合并

切换到B分支上,使用git cherry-pick命令合并

$ git checkout b
Switched to branch 'b'
$ git cherry-pick 8d01919da9339393
[q1 8d33915] 2
 Date: Thu May 7 16:26:10 2020 +0800
 1 file changed, 1 insertion(+)
1
2
3
4
5
6
1
2
3
4
5
6
1
2
3
4
5
6

这样就把 A 分支的提交记录合并到了 B 分支上

总结

git cherry-pick id>:单独合并一个提交
git cherry-pick -x id>:同上,不同点:保留原提交者信息。
1
2
1
2
1
2

通过 git cherry-pick 命令来合并某次提交是不是很简单
另外,不单单可以合并一次记录,可以通过commitId的范围记录进行范围合并。

git cherry-pick id>..
git cherry-pick id>^..
1
2
1
2
1
2

前者表示把到之间(左开右闭,不包含start-commit-id)的提交cherry-pick到当前分支; 后者有”^”标志的表示把到之间(闭区间,包含start-commit-id)的提交cherry-pick到当前分支。

作者:举杯邀月

出处: http://www.hug-code.cn/archives/5ff82d3e3b3d0.html

2020-10-30 标签: git