如何删除TortoiseHg中的意外分支?

时间:2010-06-03 04:03:06

标签: mercurial tortoisehg

(我是TortoiseHg的相对新人,所以忍受我:-)我在两台机器上使用TortoiseHg与我的远程源存储库交谈。我在一台机器上进行了更改,提交了它们,并尝试将它们推送到远程存储库但是我忘了先拉一下来获取最新的代码。推送给了我几行输出,表明我可能忘记先拉(真的!)并提到类似“abort:push创建新的远程分支......”。

所以我做了一个pull,它在存储库资源管理器中添加了几个节点到我的图形的头部。问题是我尝试做的推送现在显示为存储库资源管理器中的一个分支。从服务器端(codeplex)看,它没有显示我尝试推送的迹象,表明这个意外分支在我的机器上仍然是本地的。

我怎么能删除这个意外分支?我尝试在图表中选择该节点,然后进行“恢复”,但它似乎没有做任何事情。我想知道在本地机器上丢弃我的目录树是否最简单,并从服务器上做一个全新的,干净的拉动......?

5 个答案:

答案 0 :(得分:17)

首先确保您已提交所有本地更改。然后通过调用hg merge合并分支并提交结果。

这会让你回到一个分支,重新统一两个脑袋。

答案 1 :(得分:7)

我有一个我不想要的分支,但发现我无法合并分支(或者我很难弄清楚如何合并),因为它包含基于文件名大小写更改的冲突。 / p>

最终,我决定hg commit --close-branch。由于分支机构只存在于我的本地仓库中,而不是我从中克隆过的仓库,后来的hg push甚至都懒得把封闭的分支推到主仓库!很方便。那时,我必须做的就是完全消除它是删除我的本地仓库并从“主人”重新克隆。

答案 2 :(得分:5)

执行“合并”并选中“放弃合并目标(其他)修订版中的所有更改”。当然,在单击“合并”按钮之前,应确保显示为合并目标的目标确实是要丢弃的目标。

答案 3 :(得分:2)

在Repository资源管理器中,选择本地更改的第一次转换,然后右键单击刚刚提取的分支的提示,并选择“Rebase on selected of top”或“Modify history-> Rebase on selected top “取决于您的客户端版本。这将使你的转速“重新”基于拉动的那些。

此外,为了将来帮助避免它...

在资源库资源管理器中,选择“工具” - >“设置”。在左上角的下拉列表中,选择“用户全局设置”,因此这适用于所有存储库。然后选择左侧的“同步”。在“After Pull Operation”中选择“rebase”。这将导致您的本地修订在您刚刚提取的修订版本中“重新绑定”,而不是将它们留在不同的分支中。

我就是这样做的,也许你通常想要的。

有关详细信息,请参阅rebase projectrebase extension

答案 4 :(得分:0)

这是如何使用命令行工具完成的。我想它可以很容易地映射到TortoiseHg(虽然我不确定,因为我从来没有使用它......)无论如何,因为它应该偶尔做一次,我认为使用它没有问题在这里终端。

示例设置

假设您的远程存储库是这样的:

@  changeset:   3:a4c18a1fba12
|  tag:         tip
|  summary:     commit 4
|
o  changeset:   2:91c5dbfba15c
|  summary:     commit 3
|
o  changeset:   1:4c77cb7952ea
|  summary:     commit 2
|
o  changeset:   0:085dae46f27e
   summary:     commit 1

在本地,你没有提交4,所以你直接在提交3上提交了一些东西:

@  changeset:   3:39526003350f
|  tag:         tip
|  summary:     commit 4 made locally
|
o  changeset:   2:91c5dbfba15c
|  summary:     commit 3
|
o  changeset:   1:4c77cb7952ea
|  summary:     commit 2
|
o  changeset:   0:085dae46f27e
   summary:     commit 1

所以你试着推动它,并收到这条消息:

$ hg push
pushing to ssh://hg@bitbucket.org/brandizzi/mercurial-test-repo
searching for changes
remote has heads on branch 'default' that are not known locally: a4c18a1fba12
abort: push creates new remote head 39526003350f!
(pull and merge or see "hg help push" for details about pushing new heads)

根据要求,你拉它:

$ hg pull
pulling from ssh://hg@bitbucket.org/brandizzi/mercurial-test-repo
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)

你现在拥有它......

o  changeset:   4:a4c18a1fba12
|  summary:     commit 4
|
| @  changeset:   3:39526003350f
|/   summary:     commit 4 made locally
|
o  changeset:   2:91c5dbfba15c
|  summary:     commit 3
|
o  changeset:   1:4c77cb7952ea
|  summary:     commit 2
|
o  changeset:   0:085dae46f27e
   summary:     commit 1

...但您不希望按要求合并。你想改为:

o  changeset:   4:a4c18a1fba12
|  summary:     commit 4 made locally
|
o  changeset:   3:a4c18a1fba12
|  summary:     commit 4
|
o  changeset:   2:91c5dbfba15c
|  summary:     commit 3
|
o  changeset:   1:4c77cb7952ea
|  summary:     commit 2
|
o  changeset:   0:085dae46f27e
   summary:     commit 1

然后你想把它推到远程仓库。

你怎么做到的?

解决它

为了实现这一点,你不能推送本地提交的#34;#34;。此外,在新的远程提交之后,无法将其设置为。说,我们可以得到我们所要求的。

说,你只需要将你的本地提交重新绑定到新的远程提交:

$ hg rebase --source 3 --dest 4

如果你很幸运,那就足够了。

处理冲突

如果你运气不好,可能会有一些冲突:

$ hg rebase --source 3 --dest 4
rebasing 3:39526003350f "commit 4 made locally"
merging test.txt
warning: conflicts while merging test.txt! (edit, then use 'hg resolve --mark')
unresolved conflicts (see hg resolve, then hg rebase --continue)

然后,只需解决冲突(通过手动编辑它们):

$ hg st
M test.txt
$ nano test.txt # Edit and save

...将文件标记为已解决...

$ hg resolve --mark
(no more unresolved files)
continue: hg rebase --continue

...继续使用rebase:

 $ hg rebase --continue
rebasing 3:39526003350f "commit 4 made locally"
saved backup bundle to /home/adam/software/mercurial-test-repo/.hg/strip-backup/39526003350f-64863882-backup.hg

这是您的新历史:

@  changeset:   4:ca31fe8a15f0
|  summary:     commit 4 made locally
|
o  changeset:   3:a4c18a1fba12
|  summary:     commit 4
|
o  changeset:   2:91c5dbfba15c
|  summary:     commit 3
|
o  changeset:   1:4c77cb7952ea
|  summary:     commit 2
|
o  changeset:   0:085dae46f27e
   summary:     commit 1

现在,推动它:

$ hg push
pushing to ssh://hg@bitbucket.org/brandizzi/mercurial-test-repo
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files

那些日子,它并不像以前那么复杂,对吧? :)