有一个 hotfix分支,merge 到 master 后,忘了 merge 回 develop就被删掉了,咋办 这个时候可以祭出 git 的 cherry-pick 功能,将某个分支上面指定的几条 commit
git cherry-pick 会获取某一个分支的单笔提交,并作为一个新的提交引入到当前分支上。 在 Android Studio 中,如果要将 dev 分支的某次提交引入到一个 feature 分支,先切换到 feature 分支,在图形界面里显示 dev 的历史,然后右键选择 Cherry-Pick 要将 dev 分支的提交引入 feature 分支,先 checkout 到 feature 分支,比如 dev 分支的某次提交的哈希值是 2555c6e,然后执行 git cherry-pick 2555c6e ,然后 git cherry-pick --continue 常用 options: --quit 退出当前的 chery-pick 序列,当前分支中未冲突的内容状态将为 modified --continue
一、基本用法 git cherry-pick命令的作用,就是将指定的提交(commit)应用于其他分支。 git cherry-pick命令的参数,不一定是提交的哈希值,分支名也是可以的,表示转移该分支的最新提交。 $ git cherry-pick A^..B 三、配置项 git cherry-pick命令的常用配置项如下。 (1)-e,--edit 打开外部编辑器,编辑提交信息。 $ git cherry-pick --continue (2)--abort 发生代码冲突后,放弃合并,回到操作前的样子。 $ git log target/master 最后,使用git cherry-pick命令转移提交。 $ git cherry-pick <commitHash> (完)
以上就是git cherry-pick的基本用法,如果没有出现冲突,该命令将自动提交。 git cherry-pick -n 如果不想git cherry-pick自动进行提交,则加参数-n即可。 如果要中断这次cherry-pick,则使用git cherry-pick --quit,这种情况下当前分支中未冲突的内容状态将为modified, 如果要取消这次cherry-pick,则使用git cherry-pick --abort,这种情况下当前分支恢复到cherry-pick前的状态,没有改变。 git cherry-pick < branchname > 如果在git cherry-pick后加一个分支名,则表示将该分支顶端提交进cherry-pick,如: $ git cherry-pick 原因: 在cherry-pick时出现冲突,解决冲突后本地分支中内容和cherry-pick之前相比没有改变,因此当在以后的步骤中继续git cherry-pick或执行其他命令时,由于此时还处于上次cherry-pick
记下git的cherry-pick的使用 用途 获取某一个分支的单笔提交,并作为一个新的提交引入到你当前分支上。 # 基本语法 git cherry-pick [<options>] <commit-ish>... git cherry-pick commit-id 把该分支的最后一次提交增加到当前分支 git cherry-pick branchName 出现冲突时,放弃操作 git cherry-pick -- ↓ 当前分支中文件的状态与要cherry-pick的commit中文件状态最多相差一次提交。 # 成功的情况 git cherry-pick commit2 当commit3中修改的文件,在commit2中都没有修改时,git cherry-pick commit3
cherry-pick可能会引入一些不必要的修改。 bug只影响了你的某一个文件(假设为Sample.cs)那么我们可以用下面这个命令来解救 git rev-list [-num] --reverse master -- Sample.cs | git cherry-pick 我们看第一条 git rev-list [-num] --reverse master -- Sample.cs 他是说将Sample.cs在master上的相关提交,选取最近的(num)个提交, | git cherry-pick --stdin 说的是从标准输入设备中读取上一条命名输出的git提交号,进行cherry-pick 这样所有需要的提交就cherry-pick过来了 ---- 本文会经常更新,请阅读原文: https
$ git cherry-pick commit1..commit2 某合并的提交: 将 mergeCommit 应用到当前分支 $ git cherry-pick -m 1 <mergeCommit > 针对 merge 的 cherry-pick,不知道合并的哪一边应该被视为主线。 --reverse <commit-hash> -- <file-path> | git cherry-pick -n --stdin 避免冲突 在 cherry-pick 过程中可能会遇到冲突,Git 解决冲突后,需要继续操作: $ git cherry-pick --continue 如果决定放弃 cherry-pick,可以使用: $ git cherry-pick --abort 仓库间应用 # 追加源 $ git remote add originNew git://url # 将新追加源远程内容获取本地 $ git fetch originNew # cherry-pick $ git cherry-pick
git使用cherry-pick和merge合并文件和分支 1.merge 分支 2.cherry-pick 选中某次提交,选择右边想要合并的文件右键,然后选“cherry-pick selected changes”就行了 如果有冲突同上,会弹框让选使用哪边的 ?
2.cherry-pick 选中某次提交,选择右边想要合并的文件右键,然后选“cherry-pick selected changes”就行了 如果有冲突同上,会弹框让选使用哪边的 ?
总结对比 先给出对比: 特性 git merge git rebase git cherry-pick 功能 合并分支,保留历史 重新应用提交,使历史线性化 挑选特定提交,复制到另一个分支 提交顺序 保留分支的分叉和合并点 使用 git cherry-pick 假设我们只想将 feature 分支上的提交 E 应用到 main 分支,可以在 main 分支上运行 git cherry-pick E。 虽然它能把记录拉成一条直线,但对于团队开发而言,在看谁修改了哪部分的时候就懵逼了,非常不直观; git cherry-pick 适合在分支上做了一系列修改,不想把这么多提交都放到主分支上去的时候用。 因此,我觉得: merge > cherry-pick >> rebase 操作示例 1. git merge 示例 # 切换到 main 分支 git checkout main # 合并 feature 示例 # 切换到 main 分支 git checkout main # 挑选 feature 分支上的提交 E git cherry-pick E
文章目录 一、环境准备 二、创建新分支应用 dev2 提交 三、git cherry-pick 冲突处理 一、环境准备 ---- git cherry-pick 命令的作用是 将指定的 一个或若干个 提交记录 D:\Git\git-learning-course> D:\Git\git-learning-course>git cherry-pick f12e2d3 [master 2321849] dev1 get back to the state before "git cherry-pick", hint: run "git cherry-pick --abort". 命令, 提交该文件到暂存区 , 然后执行 git cherry-pick --continue 命令 , 继续执行 git cherry-pick 命令后续操作 , 期间会弹出 vim 编辑器 , 输入提交内容 ; D:\Git\git-learning-course>git cherry-pick --continue [dev_1 301c619] dev1 Date: Thu Dec 9 20:58:
首先需要切换到目标分支release001上: git checkout release001 //切换分支 git pull //拉取最新内容 然后开始合并A记录到release001分支上 git cherry-pick 这个,你可以这么粗暴的理解,这个cherry-pick 就是把dev上的提交A这些变动,复制过来在release001分支上再来一遍,然后pull,push,完事儿了。
聊完rebase,下方还聊如何进行cherry-pick。cherry-pick的本质其实也是合并,只不过是可以将任意分支,任意提交合并到相关分支。 当然只要是合并操作,都有可能产生冲突,下方会给出cherry-pick操作的基本使用以及如何解决cherry-pick时产生的冲突。 四、cherry-pick的基本操作 接下来我们来看一下git中比较实用的一个命令:cherry-pick。 下方就是顺利的cherry-pick后的样子。 ? 五、cherry-pick的冲突解决 在cherry-pick时遇到冲突是避免的,下方特地搞了一个cherry-pick冲突的例子。 然后我们会先看到在cherry-pick 4f8e019 这个提交时产生了冲突,报了一个Error:提升不能将cherry-pick命令应用于4f8e019。
上篇博客聊了《git分支管理之rebase 以及 cherry-pick相关操作》本篇博客我们就以Learning Git中的关卡进行展开。 下方列举了LearningGit中的 merge、rebase、reset、revert、cherry-pick 以及交互式rebase相关关卡的操作以及对应的解析。 三、cherry-pick和交互式rebase 之所以将这两个放在一块,是因为使用两者都可以达到相同的目标,只是操作不同。下方会分别介绍。 1. cherry-pick 下方我们来看一下cherry-pick这一关,下方我们需要将 bugFix 分支上的 C3 、side 分支上的 C4 以及another分支上的C7通过cherry-pick 下方主要还是使用了cherry-pick来达到我们的目标的,主要还是一个命令的使用 , 在 master 分支上执行 git cherry-pick C3 C4 C7, 可以将C3 C4 C7这三个提交摘到
以上就是git cherry-pick的基本用法,如果没有出现冲突,该命令将自动提交。 git cherry-pick -n 如果不想git cherry-pick自动进行提交,则加参数-n即可。 **git cherry-pick –continue, –abort,–quit** 当使用`git cherry-pick`发生冲突后,将会出现如下信息: $ git cherry-pick > 如果在git cherry-pick后加一个分支名,则表示将该分支顶端提交进cherry-pick $ git cherry-pick master git cherry-pick 原因: 在cherry-pick时出现冲突,解决冲突后本地分支中内容和cherry-pick之前相比没有改变,因此当在以后的步骤中继续git cherry-pick或执行其他命令时,由于此时还处于上次 cherry-pick,都会提示该信息,表示可能是由于解决冲突造成上一次cherry-pick内容是空的。
FETCH_HEAD * branch refs/changes/85/12385/3 -> FETCH_HEAD error: 'cherry-pick' is not possible file>' as hint: appropriate to mark resolution and make a commit, hint: or use 'git commit -a'. fatal: cherry-pick (fix conflicts and run "git cherry-pick --continue") (use "git cherry-pick --abort" to cancel the cherry-pick Unmerged paths: (use "git add <file>..." to mark resolution) both modified: file1.txt 用提示的命令执行 # git cherry-pick 这里用theirs git checkout --theirs file1.txt 然后添加到本地仓库 git add -A 最后继续cherry-pick「复制」 # git cherry-pick
merge分支就不行,因为系统默认你已经合并过了,导致分支代码没法再次合并,超级麻烦 用【git reset】回到出错版本的上一个版本git reset --hard 3c2af5a7 用【git cherry-pick 】把出错版本后面的commit合并进去git cherry-pick 9dba07f4^..32aba548 ##出错版本后的第一个commit直至最新commit或者使用单次合并git cherry-pick 9dba07f4git cherry-pick --continue继续处理下一个分支 如果想中途退出cherry-pick,使用git cherry-pick --abortgit push origin HEAD:comitName --force 如果在cherry-pick 的过程中出现了冲突 在处理冲突后,使用 合并冲突后,使用强制推送把旧分支进行覆盖 引用: https://www.ruanyifeng.com
FETCH_HEAD * branch refs/changes/85/12385/3 -> FETCH_HEAD error: 'cherry-pick' is not possible file>' as hint: appropriate to mark resolution and make a commit, hint: or use 'git commit -a'. fatal: cherry-pick (fix conflicts and run "git cherry-pick --continue") (use "git cherry-pick --abort" to cancel the cherry-pick paths: (use "git add <file>..." to mark resolution) both modified: file1.txt 用提示的命令执行 # git cherry-pick 这里用theirs git checkout --theirs file1.txt 然后添加到本地仓库 git add -A 最后继续cherry-pick「复制」 # git cherry-pick
merge分支就不行,因为系统默认你已经合并过了,导致分支代码没法再次合并,超级麻烦 用【git reset】回到出错版本的上一个版本 git reset --hard 3c2af5a7 用【git cherry-pick 】把出错版本后面的commit合并进去 git cherry-pick 9dba07f4^..32aba548 ##出错版本后的第一个commit直至最新commit 或者使用单次合并 git cherry-pick 9dba07f4 如果在cherry-pick 的过程中出现了冲突 在处理冲突后,使用 git cherry-pick --continue 继续处理下一个分支 如果想中途退出cherry-pick ,使用 git cherry-pick --abort 合并冲突后,使用强制推送把旧分支进行覆盖 git push origin HEAD:comitName --force 引用: https://
三、Cherry-pick操作 cherry-pick 操作是Git中的一项高级分支策略,用于选择并应用单个提交到当前分支,而不是像合并或rebase一样整体合并分支。 以下是关于 cherry-pick 操作的一些关键信息: Cherry-pick操作的目的: cherry-pick 操作的主要目的是选择性地应用一个或多个提交到你的分支中,而不必合并整个分支。 Cherry-pick操作的步骤: 首先,切换到接收更改的目标分支。 然后,运行 git cherry-pick 命令,指定要应用的提交的哈希值。 Cherry-pick与Rebase的区别: rebase 操作用于整体移动分支的更改,而 cherry-pick 用于选择性地移动单个提交。 慎用Cherry-pick: 尽管 cherry-pick 可以非常有用,但需要小心使用,以避免意外引入问题或冲突。