【问题标题】:git remove commits in a new branch which was accidently created from branch other than mastergit remove 在一个新分支中的提交,该分支是从 master 以外的分支意外创建的
【发布时间】:2020-01-21 03:24:52
【问题描述】:

我从 master 创建了一个新分支并将其命名为“LoginFeature”。我完成了这个分支的所有工作,然后把它推回了 LoginFeature。然后我从'LoginFeature'创建了一个新的分支'Dashboard'并将Master合并到'Dashboard'中。我在“仪表板”中添加了一些代码文件并将它们推送到服务器上的“仪表板”分支。

第二天,我意识到我应该从“Master”而不是“LoginFeature”创建“Dashboard”。

我该如何解决这个问题?我可以从“仪表板”分支中删除“登录功能”分支的所有提交吗?或者我应该从本地和远程删除“仪表板”分支并从主服务器重新创建“仪表板”分支并将我的新文件复制粘贴到这个分支?

【问题讨论】:

    标签: git git-branch branching-and-merging


    【解决方案1】:
    1. 删除Dashboard 分支并从Master 分支重新创建它。再次添加所有文件并推送它们。
    2. 您可以更改分支Dashboard 的父级。由于提交 SHA 涉及其父级,因此当您更改给定提交的父级时,其 SHA 将更改,并且会给其他用户造成混乱。为此,您必须使用 rebase:
    git rebase --onto `new_parent` `old_parent`
    

    【讨论】:

      【解决方案2】:

      让我们从一个分支图开始:

      master:        A -- B -- C
                           \
      LoginFeature:         D -- E
                                  \
      Dashboard:                   F -- G
      

      你想得到这个结构:

      LoginFeature:         D -- E
                           /
      master:        A -- B -- C
                                \
      Dashboard:                 F' -- G'
      

      我们可以在这里尝试使用git rebase --onto

      # from your Dashboard branch
      git checkout Dashboard
      git rebase --onto C E
      

      这表示通过重写历史来重新设置Dashboard 分支的基址,这样父级为E(上图中为F)的提交现在位于C 的新提交/基址上。这里Cmaster 分支上的最新提交。

      请注意,我用破折号标记了F'G' 提交 rebase 之后。这是为了表明这些提交实际上是完全 new 提交。变基提交通常意味着重写它们。

      另外,您的实际Dashboard 分支有一个来自master 的合并提交。但是,默认情况下,rebase 会忽略合并提交,因此在 rebase 到进程时应该将其删除。

      【讨论】:

        猜你喜欢
        • 2018-09-08
        • 1970-01-01
        • 2017-09-17
        • 2013-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-11
        • 2019-06-06
        相关资源
        最近更新 更多