【问题标题】:SourceTree - make branch the new masterSourceTree - 使分支成为新的主人
【发布时间】:2015-04-13 13:12:07
【问题描述】:

我使用 GIT 和 Sourcetree 作为 gui。

我有两个分支——master 和 feature-01。我现在想用 f​​eature-01 上的内容覆盖 master 上的所有内容。

在必须回滚 master 上的一些更改后,我不得不这样做。但是我回滚了新分支上的更改,使分支成为我希望 master 所在位置的 100%,但是现在当我合并这两个时 - master 保留了它应该像在分支中一样丢弃的所有回滚更改: /

【问题讨论】:

    标签: git atlassian-sourcetree


    【解决方案1】:

    您可以执行以下操作:

    1. 来自您的feature-01 分支:git merge --strategy=ours master
    2. 然后从您的主分支:git merge feature-01

    第一个命令将从两个分支创建一个新的(合并)提交,但使用 --strategy=ours 选项忽略 master 中的所有内容。然后,第二个命令将“推进”master 到这个新的提交。

    此时您将在master 中拥有您的feature 内容。使用此选项,您无需“重置”遥控器或类似的东西;它只会将您在feature 中所做的所有工作放入master

    【讨论】:

    • 如何在 SourceTree 中做到这一点是个问题。
    • master 分支中的git merge --strategy=theirs feature-01 不会和这两个命令做同样的事情吗?
    【解决方案2】:

    这在 SourceTree 中可行吗?

    不,这不是直接可能的,因为 Sourcetree 不支持 merge --ours
    (我已使用最新的 2.1.11.0 对其进行了测试,并嵌入了 Git 2.14.1,2017 年 9 月)。

    SRCTREEWIN-1237(……从 2013 年开始!)

    我需要使用 ours 策略,即将 myBranch 合并到 master,丢弃 myBranch 上的任何更改

    git merge -s ours myBranch
    

    这在合并两个分支时仍然不可用:


    正如this article 中提到的,您需要定义一个自定义操作:

    这将允许您模拟以下序列的merge --ours 步骤

    git checkout feature-01
    git merge --strategy=ours master
    git checkout master
    git merge feature-01
    

    SourceTree 支持checkout 和简单的merge。自定义操作允许您执行merge --ours 步骤。
    然后,master 内容将替换为feature-01 内容。
    完全来自 SourceTree。


    对于 mercurial,在“Replace the content of a hg branch”之后,您需要为命令 hg branch -f 创建自定义操作(如上图所示)(-f 选项在正常的branch 对话框)

    【讨论】:

    • 谢谢。 @VonC。我刚刚意识到我正在使用 Mecurial 进行源代码控制。也有可能吗?
    • 我也对放弃对 mybranch 的更改感到困惑。我为什么要这么做。我想像问题一样用 mybranch 替换 master 。
    • @kirsteng 我已经更新了 mercurial 的答案(尽管所有页面都是关于 Git 的;))。不要担心丢弃部分:最终结果是用另一个分支替换一个分支。根据要求。
    【解决方案3】:

    您可以在 SourceTree 3.0 中执行此操作

    选择feature-01分支然后弹出一个终端窗口

    输入命令git merge --strategy=ours master 并按回车键。 终端将提示您对提交进行评论。 它是一个 Unix Vim 编辑器,因此要保存更改需要 按 Escape 键,然后按 :x 和 Enter 保存更改

    关闭终端

    选择master分支

    打开另一个终端窗口并输入git merge feature-01

    (可能有一种方法可以从终端窗口中交换分支,但这对我有用)

    【讨论】:

      【解决方案4】:

      您可以删除主分支(它只是一个标记为提交的名称),然后在您想要的位置重新创建它:

      git branch -d master   // this will delete the branch
      git checkout feature-01
      git branch master   // this will recreate it where you are checked out.
      

      如果您已共享此存储库,请小心,您必须清理远程,并且您可能应该与使用该存储库/负责该存储库的人交谈,因为您将重写历史记录。

      【讨论】:

      • 如果 feature-01master 共享相同的历史记录,这可能没问题。
      猜你喜欢
      • 2022-07-22
      • 1970-01-01
      • 2011-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-16
      • 2020-11-02
      • 1970-01-01
      相关资源
      最近更新 更多