使用git revert回退提交后如何重新推送分支代码至development分支
问题根源
你此前在development分支执行的git revert操作,只是生成了一个反向提交抹掉了分支A的代码改动,但Git的提交历史仍然记录了「分支A已经合并到development」的状态。因此你再次合并未重置过的分支A时,Git默认只会合并你回退操作之后分支A新增的提交,不会还原之前被revert掉的代码。
解决方案
方案一:回退之前的revert提交(推荐,保留所有历史记录)
适合需要保留完整提交 trace、多人协作共用development分支的场景,操作步骤如下:
- 先切换到本地development分支,拉取最新远程代码避免冲突
git checkout development git pull origin development
- 查找你之前回退分支A合并的那次revert提交的哈希值,可通过log命令快速筛选
git log --oneline
- 执行反向操作,撤销那次回退提交,先把分支A之前的代码改动还原到development分支
git revert <你之前revert提交对应的哈希值>
- 此时再合并你修改后的分支A,就能正常合并所有新旧改动
git merge 分支A # 解决可能出现的冲突后提交改动 git push origin development
方案二:变基分支A后合并(适合分支A仅个人使用的场景)
这个方案会改写分支A的提交历史,适合没有其他开发者共用分支A的场景,不会额外多出来一次revert记录:
- 切换到你的本地分支A,拉取最新代码
git checkout 分支A git pull origin 分支A
- 以当前最新的development分支为基准执行变基操作,Git会把分支A的所有提交在development分支顶部重新生成一遍,生成全新的提交哈希,规避Git判定「已合并」的问题
git rebase development # 变基过程中如果出现冲突,解决冲突后执行`git rebase --continue`直到操作完成
- 变基完成后切换回development分支,正常合并分支A即可
git checkout development git merge 分支A git push origin development
注意事项
- 选择变基方案前必须确认没有其他开发者在共同使用分支A,否则会导致其他人的本地分支和远程分支不一致,产生大量冗余合并冲突
- 两种方案操作前都建议先备份当前本地分支的代码,避免误操作丢失改动
内容的提问来源于stack exchange,提问作者Kunal Vashist
相关产品推荐
相关产品推荐

