背景:我们在开发的时候常常需要把每天开发的内容合并到dev(防止代码丢失或者不可预期的电脑崩坏而造成前期工作白费),有时候因为自己的疏忽而合到了master或者重要的分支,之后进行revert操作再合并到正确的分支中。
1、revert操作:
- 选择产生新的提交记录,生成新的merge记录(**这时候就有两个revert操作的记录) **。
- 选择不产生新的提交记录,直接撤回
2、第二次merget操作(上线)
在开发测试阶段都完成后,进行上线环节,那么我们就要把代码合并到master了,这时你会发现少了很多提交记录。
为什么呢? (因为你第一次merge的时候会产生已提交记录,那在revert操作的时候并不会清除这些记录,只是进行了撤回操作)
3、解决办法:
-
当你revert操作的时候,在本地master分支拉取代码,进行回退操作到mert之前的提交记录,再强制覆盖远程分支。(merge之后revert之前:要保证没有其他同事进行拉取的操作,不然会造成分支污染,一定要做让同事先回退再拉取
-
revert操作后,第二次merge操作的时候,已经有大量的其他同事提交记录
-
强制物理覆盖重新提交一次(暴力解决
- 从master拉个新分支出来,物理拷贝需要上线的那个分支代码后提交, master再merge此分支
-
master 分支reset 后 pull -f(适用于非master分支)
-
注意:一般master分支都有protect ,不让回滚提交,要去gitlab上关闭此保护
-
git reset head^ --hard : head^表示回滚到上一个提交版本 --head 本地代码会被覆盖
git checkout master # 把master回滚merge之前的状态 git reset head^ --hard (或 git reset --head "<>") # 强制推上去 git push -f # 重新merge feature(上次merge的分支)后再推远程即可 git merge feature(上次merge的分支) git push
-
-
官方推荐方法:(官方推荐)(已实践)
- 情况1(与上面的标题1内容一一对应):
- 情况2(与上面的标题1内容一一对应):
#拉新分支解决 git checkout master # 从master拉一个新分支 DHR-1778 git checkout -b DHR-1778 # 找到 revert 的那条提交记录, #注意: # 情况1:revert会有两条记录,第一条是 revert,第二条是 revert 后 merge 的记录,这里取第一条 # 情况2:只有一条记录,直接用 # 用DHR-1778分支revert之前的revert git revert <版本号> # 再用master分支合并此分支代码推到远程即可(DHR-1778合并到master操作) git checkout master git merge DHR-1778 git push #不拉新分支解决,直接在master 上revert 之前revert的分支即可(不用新拉分支), 但是注意解决好冲突(拉新分支是保险起见)
-