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

教程 shanhuhai 1878℃ 0评论

场景如下, 线上刚刚更新了某个版本不久,例如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 回退版本到指定记录,但是保留中间的某几条记录

付费咨询
喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址