编辑: Mercurial版本为2.7
EDIT2:我这里有不同的书签,但想要删除其中一个而不是合并它们。
我读到我可以使用
删除远程书签foo
hg book -d foo
hg push -B foo
请告诉我我在这里做错了什么,同时尝试在本地(有效)删除书签@default
然后远程(这不起作用,以便下次拉动时再次恢复):
$ hg pull
pulling from /tmp/foo/base
searching for changes
no changes found
divergent bookmark @ stored as @default
$ hg book
* @ 8:d7a82de9f7c9
@default 9:c12daad73af2
$ hg book -d @default
$ hg book
* @ 8:d7a82de9f7c9
$ hg push -B @default
pushing to /tmp/foo/base
searching for changes
no changes found
bookmark @default does not exist on the local or remote repository!
$ hg in -B
comparing with /tmp/foo/base
searching for changed bookmarks
no changed bookmarks found
$ hg out -B
comparing with /tmp/foo/base
searching for changed bookmarks
no changed bookmarks found
$ hg pull
pulling from /tmp/foo/base
searching for changes
no changes found
divergent bookmark @ stored as @default
$ hg book
* @ 8:d7a82de9f7c9
@default 9:c12daad73af2
谢谢!
答案 0 :(得分:2)
看来你有一个Divergent Bookmarks的案例!
我相信(虽然请注意我还没有尝试在远程仓库上重新创建它以进行测试)远程仓库认为它对本地仓库也已更新的书签进行了更新。这个名字虽然没有呈现,但这很奇怪;它是用空格命名的,CLI无法呈现的东西,或者可能是“@”符号本身?您可能只是在远程仓库的书签文件中有一个损坏的条目。
当您拉出书签并且本地和远程都更新了相同的书签时,会创建一个不同的书签。远程版本附加“@ [path]”,其中路径是根据远程仓库的源从hgrc文件的[paths]部分提取的。 (有关详细信息,请参阅hg paths
。)“@ [path]”版本仅存在于本地,直到您合并并删除不同的书签。
我认为如果你要合并并推送到远程仓库,你就会解决书签问题,事情会恢复正常。
在你的评论中,你说你故意使用名为“@”的书签,引用书签的帮助:“如果你设置一个名为'@'的书签,那么存储库的新克隆将检出该修订版(和默认情况下,书签处于活动状态。“
在这种情况下,为了防止创建@default
,您需要让两个repos同意哪个变更集应该具有@
;基本上你需要修复分歧。鉴于您不想合并并推回到远程仓库,这意味着更新@
书签以匹配远程仓库。
在您的问题中使用示例控制台,我相信删除不同的书签并重置@
书签以匹配远程仓库将防止出现不同的问题:
hg book -d @default
hg book @ -r 9 -f
答案 1 :(得分:2)
远程书签的名称为@
,而非@default
。您需要做的就是在本地删除@default
,然后将@
推送回远程存储库。这将更新远程存储库以同意您的@
书签。
hg init a
cd a
echo >file1
hg ci -Am1
hg clone . ..\b
echo >file2
hg ci -Am2
hg book @
hg log
@REM *** At this point "a" has a bookmark on the changeset with comment "2"
cd ..\b
echo >file3
hg ci -Am3
hg book @
@REM *** At this point "b" has a bookmark on the changeset with comment "3"
hg pull ..\a
@REM *** Mercurial 2.7 named the divergent bookmark @1.
@REM *** I delete the local divergent bookmark and push back to "a" (including new changeset)
hg boo -d @1
hg push ..\a -f -B @
@REM *** Display "b" log
hg log
@REM *** Display "a" log...bookmark is moved to changeset with comment "3"
cd ..\a
hg log