git remove在新分支中提交,该分支是从master分支以外的分支意外创建的

时间:2019-09-20 05:08:15

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

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

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

我该如何解决?我可以从“仪表板”分支中删除“ LoginFeature”分支的所有提交吗?还是应该从本地和远程删除“仪表板”分支,然后从母版中重新创建“仪表板”分支,然后将新文件复制粘贴到该分支中?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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'在破折号后的 中用短划线表示。这表明这些提交实际上完全是 new 提交。重定提交通常意味着重写它们。

此外,您实际的Dashboard分支具有来自master的合并提交。但是,默认情况下,rebase将忽略合并提交,因此应在合并过程中将其删除以重新基于进程。