git revert后再次merge代码丢失问题
问题场景
公司使用gitlab作为代码管理工具,开发人员新功能开发结束时(开发分支:feature-member),合并代码需要提交mr(pr)给相关负责人,由负责人将代码合并到master。
此时产品说暂时不上线此版本,和下一个版本一起发布,为了保证master分支代码的准确性,我们使用git revert将本次mr撤销。
然后等下个版本开发完成后,提交了mr,发现变动的文件只有revert之后的变动,第一次mr的文件改动都没有了(git revert后再次merge,git默认会丢弃这段代码)。
解决方案
# 切换到master分支 git checkout master git pull # 基于master拉出一个分支 revert_tmp git checkout -b revert_tmp # 将之前git revert那次commit再次revert(commit号从git log可以查到) git revert acd414e1cd42315ce93a9730db961155be140013 git checkout feature-member git merge revert_tmp git commit -m "revert" git push
经过以上操作后,再次提pr,这样第一次revert之前的代码就可以看到了。
git revert 某次 merge 之后再重新 merge 代码被冲掉
问题
在 develop 分支发现 merge 某个 feature 分支时的代码有问题(如果是 feature 分支的代码有问题,只要修改该 feature 分支的代码,再 merge 到 develop 就好了。
如果是 merge 的时候冲突没有解决好则需要 revert 该次 merge),于是用 ’git revert < commit id > -m 1 ‘ 命令 revert 了该次 merge , 但是 revert 之后想把这个 feature 分支再重新merge到develop 分支时,发现 merge 不了。
解决方法
在 revert feature 的 merge 之后,checkout 到 feature 分支,
使用 git reset head^ 撤销上次提交(如果merge前有多个提交就撤消所有提交)
然后修改有问题的代码,代码没问题的话不修改也行
修改完后 ,将代码提交并强推到远程分支
git add . git commit -m “” git push -f
再 checkout develop 切换到 develop 分支
用 git merge 再merge 一次该feature分支,就会发现代码都 merge上去了
最后 push 到远程就ok了。
总结
这些仅为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论