You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mercurial克隆仓库合并报错:无变更却提示未提交本地修改

Mercurial合并异常:未提交修改提示与缺失文件问题

问题描述

仓库存在两个分支头(变更集13和12),刚克隆仓库并切换到变更集13后,执行hg merge 12提示abort: uncommitted changes,但hg status无任何输出;强制合并后提交时,系统提示有21个缺失文件但未列出,hg status仍显示干净。环境为Mercurial 6.6.3(TortoiseHg)、仅启用标准扩展,操作系统Win10/Win11。

附操作记录:

C:\Users\ar\judo> hg clone -U docs docsclone

C:\Users\ar\judo> cd docsclone

C:\Users\ar\judo\docsclone>hg log -G

o  changeset:   13:00e42bc1d80c
|  tag:         tip
|  parent:      11:2636897b57e0
|  user:        alre
|  date:        Sat Mar 16 23:40:29 2024 +0100
|  summary:     fixed DT handling in results export script
|
| o  changeset:   12:258250141287
|/   user:        indo
|    date:        Sat Mar 16 23:36:59 2024 +0100
|    summary:     JMP 2024 done + results exported
|
o  changeset:   11:2636897b57e0
|  user:        alre
|  date:        Fri Mar 15 23:03:43 2024 +0100
|  summary:     prepared tournament files JMP 2024 
|

... (clipped)

C:\Users\ar\judo\docsclone>hg update 13
4404 files updated, 0 files merged, 0 files removed, 0 files unresolved

C:\Users\ar\judo\docsclone>hg merge 12
abort: uncommitted changes
(use 'hg status' to list changes)

C:\Users\ar\judo\docsclone>hg status

C:\Users\ar\judo\docsclone>hg status --all
C .hgignore
... (clipped; shows all Clean)

C:\Users\ar\judo\docsclone>hg commit
nothing changed (21 missing files, see 'hg status')

C:\Users\ar\judo\docsclone>hg purge --all

c:\Users\ar\judo\docsclone>hg update null
0 files updated, 0 files merged, 4383 files removed, 0 files unresolved

c:\Users\ar\judo\docsclone>hg update 13
4404 files updated, 0 files merged, 0 files removed, 0 files unresolved

解决方案

1. 重置工作区至干净状态

执行以下命令强制将工作区恢复到变更集13的纯净状态,消除潜在的状态缓存异常:

hg update --clean 13

完成后再次尝试合并:

hg merge 12

2. 检查仓库完整性与元数据

运行仓库验证命令,排查是否存在变更集或文件损坏:

hg verify

如果验证发现错误,尝试恢复仓库(需确保有备份):

hg recover

若恢复无效,重新克隆完整仓库(避免使用-U参数,直接克隆并自动更新到tip):

hg clone docs docsclone_new
cd docsclone_new
hg update 13
hg merge 12

3. 排查Windows文件系统大小写冲突

Windows默认大小写不敏感,若两个分支存在文件名大小写不同的文件,会导致Mercurial状态判断异常。

  • 启用大小写冲突警告后重新克隆:
hg clone --config ui.casecollision=warn docs docsclone_casefix
  • 检查仓库中是否存在大小写差异的文件(PowerShell命令):
hg log -T "{files}\n" | Select-String -Pattern "(^|[^a-zA-Z0-9])([a-z][A-Z]|[A-Z][a-z])" | Sort-Object | Get-Unique

找到冲突文件后,统一文件名大小写再进行合并。

4. 调试并重置Mercurial状态缓存

使用调试命令重置Mercurial内部状态缓存,解决状态显示不一致问题:

hg debugstate --reset

执行后再次查看状态并尝试合并:

hg status
hg merge 12

5. 查看缺失文件具体信息

执行以下命令强制显示缺失文件列表:

hg status --missing

根据输出找到缺失文件,检查是否被.hgignore规则排除,或手动恢复这些文件后再提交。

内容的提问来源于stack exchange,提问作者Pastagod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 21:33:22