首页 > 其他分享 >git cherry-pick 同步修改到另一个分支

git cherry-pick 同步修改到另一个分支

时间:2022-12-20 19:34:50浏览次数:43  
标签:git -- cherry pick commit 分支

我们在开发中有时会遇到,需要将另一个分支部分修改同步到当前分支。
如下图,想把 devA 分支中 commit E 和 F,同步到下面绿色的 devB 分支中。
image.png

这时候就可以使用 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

标签:git,--,cherry,pick,commit,分支
From: https://www.cnblogs.com/shuofxz/p/16994923.html

相关文章

  • git相关问题解析,你想要的都有
    官网文档:https://git-scm.com/doc本地克隆远程代码仓库gitclone地址本地同步全量历史数据,克隆所有文件的历史记录gitclone地址—depth1本地同步默认分支......
  • go-Typora-Sqoosh-图像压缩-Github-图床
    go-Typora-Sqoosh-图像压缩-Github-图床SquooshGoogleChromeLabs/squoosh:Makeimagessmallerusingbest-in-classcodecs,rightinthebrowser.(github.com)htt......
  • cherry键盘alt+tab快捷键失效
    转载误触,折磨我20min……......
  • git常用命令记录
    gitcheckoutbranchName切换分支gitswitchbranchName切换分支gitcheckout-bnewBranchName从当前分支拉去代码创建分支,并切换到新分支git......
  • Git-入门教程
    ​​Git简介​​​​安装Git​​​​创建版本库​​​​Git时光穿梭机​​​​Git远程仓库​​​​Git分支管理​​​​Git标签管理​​​​使用Git​​​​自定义Git​​......
  • Windows7下git配置difftool
    GIT是一个代码版本控制工具,是软件开发团队中必不可少的一类工具,类似的工具还有像SVN,CVS等;在此之前我一直使用的SVN,因为SVN在windows下有很好的客户端【小乌龟】,使用起来简单......
  • git rebase
    使用rebase-i命令選擇要修改的提交#返回当前head和head~~之间的log前开后闭gitrebase-iHEAD~~返回以下格式pick9a54fd4添加commit的說明pick0d4a808添......
  • git 看某次commit改了哪些文件
    gitlog查看commit的历史gitshow查看某次commit的修改内容gitlog-p查看某个文件的修改历史gitlog-p-2查看最近2次的更新内容gitlog–name-status每次修改......
  • Git
    目录Git一、安装二、基本配置1、配置用户名和邮箱2、查看设置好的用户名三、创建本地仓库四、基础操作命令1、查看文件的状态(status)2、将文件添加到暂存区(add)3、提交暂......
  • 女朋友说 Git 玩不明白,怎么办?安排! 陌小路
    前言在某个月黑风高的晚上,一脸愁容的女朋友突然跟我说,Git老搞不明白,有什么比较好的经验可以分享下吗,说时迟,那时快,二话不说,立马开始奋笔疾书......在平时的Coding过程......