

git cherry-pick 同步修改到另一个分支 - 大数据王小皮
source link: https://www.cnblogs.com/shuofxz/p/16994923.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

我们在开发中有时会遇到,需要将另一个分支部分修改同步到当前分支。
如下图,想把 devA 分支中 commit E 和 F,同步到下面绿色的 devB 分支中。
这时候就可以使用 git cherry-pick
来完成这项任务。
(cherry-pick 有筛选、精选的意思)
一、基本用法#
转移单个提交
git cherry-pick <commitHash>
# 切换到 devB 分支
$ git checkout devB
# Cherry pick 操作
$ git cherry-pick <HashE>
解决冲突后,commit 即可
二、转移多个提交#
如果我有一堆连续的 commit 都想同步过去,那么可以用下面的语法:
下面的命令可以转移从 E 到 F 的所有 commit。 注意按顺序写:提交 E 必须早于提交 F
git cherry-pick <HashE>..<HashF>
还要注意上面命令是左开右闭的,即不包含 commit_E,如果需要两边都包括,用下面的语法:
git cherry-pick <HashE>^..<HashF>
如果是分开的几个 commit,可以这样写:
git cherry-pick <HashE> <HashG>
三、参数#
文档中是这样写的:
usage: git cherry-pick [<options>] <commit-ish>...
or: git cherry-pick <subcommand>
--quit end revert or cherry-pick sequence
--continue resume revert or cherry-pick sequence
--abort cancel revert or cherry-pick sequence
--skip skip current commit and continue
--cleanup <mode> how to strip spaces and #comments from message
-n, --no-commit don't automatically commit
-e, --edit edit the commit message
-s, --signoff add a Signed-off-by trailer
-m, --mainline <parent-number>
select mainline parent
--rerere-autoupdate update the index with reused conflict resolution if possible
--strategy <strategy>
merge strategy
-X, --strategy-option <option>
option for merge strategy
-S, --gpg-sign[=<key-id>]
GPG sign commit
-x append commit name
--ff allow fast-forward
--allow-empty preserve initially empty commits
--allow-empty-message
allow commits with empty messages
--keep-redundant-commits
keep redundant, empty commits
提几个会用得到的:
1)-n
如果你想转移多个 commit 并在新分支中只想有一个 commit,那就可以添加 -n
参数,不自动提交代码,都转移后一次性手动提交。(注意如果有 conflict 情况就不是很好用)(为了分辨是从其他分支转移过来的,可以新开一个分支同步这些 commit,然后再 merge 到目标分支)
-n, --no-commit don't automatically commit
2)-x
在提交信息的末尾追加一行(cherry picked from commit ...),方便以后查到这个提交是如何产生的。
-x append commit name
3)不建议同步「合并(merge)节点」,得到的结果应该不是你想要的(有兴趣可以自己尝试)。
四、代码冲突#
1)--continue
同步代码不可避免遇到冲突情况,解决冲突后,将修改的文件重新加入暂存区 git add .
,然后使用下面命令继续:
git cherry-pick --continue
2)--abort
处理过程中可能有误操作,那么可以放弃合并,回到操作前的样子。
git cherry-pick --abort
(3)--quit
发生代码冲突后,退出 cherry pick,但是不回到操作前的样子。
git cherry-pick --quit
Recommend
-
7
同步Git库的一个remote到另一个 2017-12-19 10:23:09 +08 字数:793 标签: Git 有时候有这样的需求: 一个Git库是在某个位置开发、维...
-
7
一日一技:使用 Git 在错误的分支上修改了代码怎么办? 发表于 ...
-
4
V2EX › 程序员 求推荐友好的数据库同步工具,可以同步一个 MySQL 到另一个 MySQL 数据库? ...
-
2
了解 Yarn 基础库是后面阅读 Yarn 源码的基础,本节对 Yarn 基础库做总体的介绍。并对其中使用的第三方库 Protocol Buffers 和 Avro 是什么、怎么用做简要的介绍。 一、主要使用的库 Protocol Buffers
-
8
如果你被问到:什么是反射?为什么需要反射、以及反射的应用?你会如何回答呢? 本篇会带大家初识反射,了解反射概念和基本应用。反射的原理以及深入源码的探究将会在后面几篇介绍。 一、什么是反射?
-
13
本篇继续对 RM 中管理 NodeManager 的部分进行深入的讲解。主要有三个部分:检查 NM 是否存活;管理 NM 的黑白名单;响应 NM RPC 请求。 一、简介
-
10
在 YARN 中,Application 是指应用程序,它可能启动多个运行实例,每个运行实例由 —个 ApplicationMaster 与一组该 ApplicationMaster 启动的任务组成,它拥有名称、队列、优先级等属性,是一个比较宽泛的概念,可以是一个 MepReduce 作业、一个 DAG 应用程序等。YAR...
-
6
流处理和批处理是什么? 什么是 Flink?为什么要学习 Flink? Flink 有什么特点,能做什么? 本文将为你解答以上问题。 一、批处理和流处理
-
4
本篇文章将带大家运行 Flink 最简单的程序 WordCount。先实践后理论,对其基本输入输出、编程代码有初步了解,后续篇章再对 Flink 的各种概念和架构进行介绍。 下面将从创建项目开始,介绍如何创建出一个 Flink 项目;然后从 DataStream 流处理和 FlinkSQL 执...
-
6
前面几篇文章带大家了解了 Flink 是什么、能做什么,本篇将带大家了解 Flink 究竟是如何完成这些的,Flink 本身架构是什么样的,让大家先对 Flink 有整体认知,便于后期理解。 一、Flink 组件栈
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK