Git:如何撤销含--ignore-unrelated-history的合并并删除无关提交
1. 定位错误的合并提交
- 执行
git log --oneline --graph查看提交历史,找到合并无关仓库分支的目标提交(通常带有Merge branch 'xxx' from <无关仓库地址>类描述) - 若记得合并时间,可通过
git log --oneline --since="YYYY-MM-DD"缩小查找范围
2. 撤销合并操作
根据是否已推送到远程仓库,选择对应处理方式:
未推送到远程
- 若合并后无新增其他提交,可直接回退到合并前状态:
注意:此操作会丢弃合并后的所有本地变更,需谨慎使用。git reset --hard <合并前的提交哈希值> - 若合并后已有其他提交,优先用
revert生成撤销提交,保留后续提交历史:git revert -m 1 <错误合并提交的哈希值>-m 1表示保留当前分支主线历史,仅撤销合并带来的变更。
已推送到远程
- 禁止使用
git reset(会改写远程历史,影响协作者),必须用git revert生成撤销提交:
执行后将新生成的撤销提交推送到远程,同时告知团队成员拉取更新以避免冲突。git revert -m 1 <错误合并提交的哈希值>
3. 清理残留的无关内容
- 删除无关标签:
- 执行
git tag -l列出所有标签,识别不属于本仓库的标签 - 删除本地标签:
git tag -d <目标标签名> - 若标签已推送到远程,同步删除远程标签:
git push origin :refs/tags/<目标标签名>
- 执行
- 清理残留的无关提交:
撤销合并后,无关提交会变成无引用的历史对象,可执行以下命令强制清理:
此命令会删除所有未被引用的历史数据,确保没有需要保留的未提交变更后再执行。git gc --prune=now
内容的提问来源于stack exchange,提问作者kerner1000
相关产品推荐
相关产品推荐

