执行git reset <commitId>回退提交后,如何正确推送到master分支?
问题解答:git reset后的提交推送操作是否正确?
你的操作不正确,具体原因和后续建议如下:
你执行的
git reset <commitId>默认是--mixed模式,该操作会将HEAD和当前分支指针回退到指定提交,同时把被回退的4个提交中的变更转为工作区的未暂存更改。你手动删除新增文件后,工作区状态虽符合预期,但此时执行git commit会生成一个新提交,而之前被reset的4个提交仍存在于Git历史中。如果该分支是多人协作的公共分支,直接git push会因本地分支落后于远程分支被拒绝;强行用git push -f推送会覆盖远程历史,导致其他协作者的本地仓库出现冲突。你已经意识到混淆了
reset与revert的用法:git revert通过创建新提交来撤销指定提交的变更,不会修改已有历史,更适合公共分支的回退场景;git reset则更适合在本地私有分支上调整未推送的历史记录。
结合你已确认正确方案的情况,再补充两种场景的操作建议:
- 若为本地私有分支(无他人推送代码):可先执行
git add .暂存当前变更,再执行git commit -m 'reverting back to XXXXX',之后直接git push即可;若之前的4个提交已推送过,需用git push -f(仅限私有分支使用)。 - 若为公共协作分支:不应使用
git reset,正确做法是用git revert <起始提交ID>..<结束提交ID>批量撤销那4个提交,之后正常提交推送,避免破坏远程分支历史。
内容的提问来源于stack exchange,提问作者SpecialEd
相关产品推荐
相关产品推荐

