代码之家  ›  专栏  ›  技术社区  ›  Michael Sorens

如何去除龟的意外分枝?

  •  21
  • Michael Sorens  · 技术社区  · 14 年前

    (我对TortoiseHg是一个比较陌生的人,所以请容忍:-)我在两台机器上使用TortoiseHg与我的远程源代码库进行通信。我在一台机器上进行了更改,提交了这些更改,并试图将它们推送到远程存储库,但我忘记了首先进行拉取以获取最新的代码。推送给了我几行输出,表明我可能忘记了先拉(真的!)并提到类似“中止:推送创建新的远程分支…”。

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

    我怎样才能去掉这根意外的树枝?我尝试在图中选择该节点,然后执行“还原”,但它似乎没有做任何事情。我想知道这是否是最简单的放弃我的目录树在我的本地机器和做一个全新的,干净的拉从服务器。。。?

    5 回复  |  直到 10 年前
        1
  •  17
  •   sth ACP    14 年前

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

    这会把你带回一个分支,让两个头重聚。

        2
  •  7
  •   j0k gauthamp    12 年前

    我有一个我不想要的分支,但是我发现我不能合并这个分支(或者我很难知道如何合并),因为它包含一个基于文件名大小写更改的冲突。

    最终,我决定 hg commit --close-branch . 由于分支机构只存在于我的本地回购上,而不是我克隆的回购上,因此 hg push 甚至都懒得把关闭的分支机构推给回购大师!非常方便。在那一刻,我所要做的一切,以消除它完全是删除我的本地回购和重新克隆从“主”。

        3
  •  5
  •   mhenry1384    14 年前

        4
  •  2
  •   Kyle Heironimus    12 年前

    在“存储库资源管理器”中,选择本地更改的第一个版本,然后右键单击刚刚拉取的分支的尖端,然后选择“在选定分支的顶部重新设置基础”或“修改历史记录”->根据您的客户端版本,在选定的“基础”上重新设置基础。这将“重新基地”你的转速拉的。

    另外,为了避免将来发生这种情况。。。

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

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

    rebase project 以及 rebase extension

        5
  •  0
  •   brandizzi    8 年前

    示例设置

    @  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
    

    然后你想把它推到远程回购。

    你怎么知道的?

    解决它

    不能 已经推送了“commit 4 made locally”。而且,也没办法说 之后 新的远程提交。说了这些,我们就能得到我们想要的。

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

    $ 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
    

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