赞
踩
描述:你可以这样理解,git cherry-pick
是一个特别的 git merge
。有时候不需要将一个分支全部的代码变动都进行合并,而是将部分的代码变动进行合并,即只合并一个或多个现有的提交。
举例:现在有两个分支 master 和 test,希望能将 test 分支里的 commit_b
的提交合并到 master 分支里去,如下图所示:
执行 git cherry-pick <commit_b 的 commitId>
后,如下图所示:
commitId
进行合并;$ git cherry-pick <commitId> — — — — — — — — — — — — — — — — — — 举例如下 — — — — — — — — — — — — — — — — — — # master 分支里的提交: $ git log --pretty=oneline --->> 3ee2c7b26845a54a97f466644616a7907432ca73 (HEAD -> master) modify-test 69322b677a3a6be363ba559610988607480677ce init ---<< # test 分支里的提交: $ git log --pretty=oneline --->> 389a14dcc9434026e176858733b95598dd192efa (HEAD -> test) console-log 7a54c5fede3905d025bf4e6df1698ec0569fd839 ✨new-function 3ee2c7b26845a54a97f466644616a7907432ca73 (master) modify-test 69322b677a3a6be363ba559610988607480677ce init ---<< # 现在将 test 分支里的 'new-function' 的提交合并到 master 分支中: # 01 首先切到 master 分支 $ git checkout master --->> Switched to branch 'master' ---<< # 02 执行 cherry-pick ,并将<commitId>复制过来 $ git cherry-pick 7a54c5fede3905d025bf4e6df1698ec0569fd839 --->> [master 0d28d12] ✨new-function Date: Tue Dec 7 16:50:59 2021 +0800 1 file changed, 25 insertions(+) create mode 100644 TheBestChoice.js ---<< # 03 查看一下提交记录,合并成功啦! $ git log --pretty=oneline --->> 0d28d12418b5a97345ddfb75c753168f0d9a9f88 (HEAD -> master) ✨new-function 3ee2c7b26845a54a97f466644616a7907432ca73 modify-test 69322b677a3a6be363ba559610988607480677ce init ---<<
分支名
进行合并,即 合并该分支里的最新一次的提交;$ git cherry-pick <branch_name> — — — — — — — — — — — — — — — — — — 举例如下 — — — — — — — — — — — — — — — — — — # test 分支里的提交: $ git log --pretty=oneline --->> f2170fd47807d2ef086d357c269a84c09409c55b (HEAD -> test) hello world 6ca9fb9b230158c60493826bf0fdf646f4f2213c add b6cdb2628137e89401472b062343427d931f02eb modify hello ---<< # 切到 master 分支后执行如下 $ git cherry-pick test --->> [master 6651c1e] new file Date: Tue Dec 7 17:40:25 2021 +0800 1 file changed, 1 insertion(+) create mode 100644 world.js ---<< # 注意:如果合并有冲突,则需要手动解决冲突后进行 git add + git commit
# 注意:commitId 之间用空格隔开
$ git cherry-pick <commitId_A> <commitId_B> <commitId_C>
# 效果:合并从 A 到 B 的提交!
# 注意(1):这种方式并不包含 commitId_A;
# 注意(2):必须按照正确的顺序放置,即 A 必须早于 B,否则命令将失败,但不会报错。
$ git cherry-pick <commitId_A>..<commitId_B>
# 注意:使用^ ,则包含 commitId_A
$ git cherry-pick <commitId_A>^..<commitId_B>
配置项 | 描述 |
---|---|
-e ,--edit | 打开外部编辑器,编辑提交信息。 |
-n ,--no-commit | 只更新工作区和暂存区,不产生新的提交。 |
-x | 在提交信息的末尾追加一行 cherry picked from commit ... ,方便以后查到这个提交是如何产生的。 |
-s ,--signoff | 在提交信息的末尾追加一行操作者的签名,表示是谁进行了这个操作。 |
-e ,--edit | 打开外部编辑器,编辑提交信息。 |
详细说明:-m parent-number
,--mainline parent-number
cherry-pick
不知道采用哪个分支的代码变动,所以操作会失败。-m
配置项会标明采用某个分支的变动。它的参数 parent-number
是一个从 1 开始的整数,代表原始提交的父分支编号。$ git cherry-pick -m 1 <commitId>
,即表示 cherry-pick
采用提交 commitId
来自编号 1 父分支的变动。操作过程中或多或少会遇到一些不太顺利的情况,这个时候应该如何是好呢
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/936493
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。