误执行git branch强制覆盖分支,寻求恢复原状态的方法
问题场景
- 很久前创建的
document/initial-architecture分支上用Draw.io写完架构图,准备合并到master时,收到提示:There isn't anything to compare. master and document/initial-architecture are entirely different commit histories. - 之后执行了错误命令,强制把本地master分支指向了这个架构分支,尝试推送到远程时因为master是保护分支失败,现在本地master和远程origin/master产生37项变更分歧,需要撤销操作恢复原样。
- 执行过的错误命令:
git branch master document/initial-architecture -f git checkout master git push origin master -f
恢复步骤
找到重置前的master提交记录
执行命令:git reflog在输出里找执行
git branch master ... -f之前,本地master分支对应的提交哈希(比如条目里带checkout: moving from master to ...的那一行,前面的一串字符就是你要的哈希值)。重置本地master到之前的状态
先确保当前在master分支:git checkout master然后用找到的哈希值硬重置:
git reset --hard <你找到的重置前的哈希值>这一步会直接把本地master恢复到错误操作前的状态。
确认恢复成功
执行命令验证:git status正常会显示
Your branch is up to date with 'origin/master'.,再查看提交记录和远程一致就没问题了。
正确合并架构分支的方法(避坑参考)
因为两个分支没有共同提交历史,正确的合并方式应该是:
git checkout master git pull origin master git merge document/initial-architecture --allow-unrelated-histories
解决完冲突后正常提交、推送即可,不用强制操作。
内容的提问来源于stack exchange,提问作者Wes
相关产品推荐
相关产品推荐

