场景如下, 线上刚刚更新了某个版本不久,例如A, 但是领导想法突然变了, 想要撤回到之前的某个版本B
(A, B 指代版本对应的 commitid)
这个操作比较简单,使用 git reset --hard B
就可以了。
但是 从 A 到B 中间可能还有 十几个 commit , 领导需要保留其中的 C 和 D 两次提交, 这时候怎么办?
这时候就要用到传说中的 cherry pick
了。
对于多分支的代码仓库,将代码从一个分支转移到另一个分支是常见需求。
当你需要另一个分支的所有代码变动,那么就采用合并(git merge)。另一种情况是,你只需要部分代码变动(某几个提交),这时可以采用 Cherry pick。
上述问题的解决方案如下,首先假设当前分支为 master, 线上最新版本commitid 为 A, 要返回的之前的版本的 commitid 为B,A与B 之间有十个提交 ,要保留中间的 C 和 D 提交。
操作步骤如下:
1.首先备份 master 分支,以免后面找不回来, 然后将 master 分支使用 git reset –hard 进行版本回退
将 master 分支备份为 master_bak
git checkout master
git checkout -b master_bak
git push origin master_bak 将备份分支推送到远程
将版本回退到 B
git reset --hard B
2.使用 cherry pick 将 C、D提交合并到回退后的 master 分支
git checkout master
git cherry-pick C
git cherry-pick D
这时候如果不发生冲突, B commit记录之上会额外增加两个C 和 D的提交。
可以检验下是否只保留了 C,D 提交。
转载请注明:大后端 » git 回退版本到指定记录,但是保留中间的某几条记录