22

(我是 TortoiseHg 的新手,所以请耐心等待 :-) 我在两台机器上使用 TortoiseHg 来与我的远程源存储库通信。我在一台机器上进行了更改,提交了它们,并试图将它们推送到远程存储库,但我忘了先拉取最新的代码。push 给了我几行输出,表明我可能忘记了先 pull(真的!)并提到了类似“abort:push 创建新的远程分支......”之类的东西。

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

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

4

5 回答 5

17

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

这应该让你回到一个分支,重新组合两个头。

于 2010-06-03T04:17:56.537 回答
7

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

最终,我决定hg commit --close-branch。由于该分支仅存在于我的本地存储库中,而不是我从中克隆的存储库中,因此后续hg push甚至懒得将关闭的分支推送到主存储库!很方便。那时,我要做的就是完全删除它,删除我的本地仓库并从“master”重新克隆。

于 2012-10-02T19:46:26.107 回答
5

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

于 2010-09-22T03:01:47.060 回答
2

在 Repository explorer 中,选择本地更改的第一个 rev,然后右键单击刚刚拉出的分支的尖端,然后根据您的选择“Rebase on top of selected”或“Modify history->Rebase on top of selected”客户端版本。这将使您的转速“重新建立”在拉动的转速上。

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

在 Repository Explorer 中,选择 Tools->Settings。在左上角的下拉菜单中,选择“用户全局设置”,这适用于所有存储库。然后选择左侧的同步。在“拉操作后”中选择“变基”。这将导致您的本地修订“重新基于”您刚刚提取的修订,而不是将它们留在不同的分支中。

我就是这样做的,这可能是您通常想要的。

有关详细信息,请参阅变基项目变基扩展

于 2010-06-04T13:44:07.617 回答
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

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

你怎么知道的?

解决它

为此,您不能推送“本地提交 4”。此外,没有办法将它放在的远程提交之后。说,我们可以得到我们所要求的。

也就是说,您只需要将本地提交重新定位到新的远程提交:

$ 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

...并继续进行变基:

 $ 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

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

于 2016-11-11T09:30:46.543 回答