git 回退版本到指定记录 并保留中间的某几条记录

场景:

项目更新了A版本不久,过了很久发现有bug或者需求变更, 想要撤回到之前的某个版本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)