Git 优雅的撤销中间某次提交(包括 merge)
前言
最近两天,公司的git
合并代码时,出现了严重的问题,浪费很多时间;
现在记录下;
情况是这样的,有一个 dev
测试分支,我们有自己额外的开发分支,在不知情的情况下有人执行了 merge dev
当发布的时候才发现问题。模拟图片:
而此时版本库已经提交过多次,现在的问题是如何将中间 merge dev
提交的代码撤销,并保留之后别人提交的代码。
方法一:revert 撤销某次提交
步骤 一
git revert 100047dcc
error: Commit 100047dccb58f3ee5e27b0dfaf5c02ac91dc2c73 is a merge but no -m option was given.
fatal: revert failed
结果报错了,报了一个 Commit is a merge but no -m option was given.
为什么呢?
如果 100047dcc
这只是一个普通的提交,其实是不会报错的,但是,这是一个 merge
的提交。
这个时候,怎么办呢?
我的做法
步骤 一
git revert 100047dcc -m 1
参数 -m 就是指定要撤销的那个提价,从左往右,从1开始数;也就是我撤销的是 0099aca7
。
接着其把代码冲突,然后我就解决冲突,保留主分支的代码,去掉那个人的代码。
最后一步
git push
方法二:
具体步骤:
1,首先git log查看提交记录,找到出错的前一笔提交的commit_id
2,用命令git rebase -i commit_id ,查找提交记录
3,将出错那笔提交的pick改为drop
4,Esc,:wq
方法三:git cherry-pick
1、git reset --hard 1d7444 #回退到出错版本前一个commit
2、git cherry-pick 626335 #将某次commit的更改应用到当前版本(将出错 cmmit 之后别人提交的代码合并到当前正常代码分支上)
3、git push origin HEAD --force #强制提交
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: