我从master创建了一个新分支,并将其命名为“ LoginFeature”。我完成了该分支中的所有工作,然后将其推回LoginFeature。然后,我从'LoginFeature'创建了一个新的分支'Dashboard',并将Master合并到'Dashboard'。我在“仪表板”中添加了一些代码文件,并将它们推送到服务器上的“仪表板”分支。
第二天,我意识到我应该从“ Master”(而不是“ LoginFeature”)创建“ Dashboard”。
我该如何解决?我可以从“仪表板”分支中删除“ LoginFeature”分支的所有提交吗?还是应该从本地和远程删除“仪表板”分支,然后从母版中重新创建“仪表板”分支,然后将新文件复制粘贴到该分支中?
答案 0 :(得分:1)
Dashboard
分支,然后从Master
分支重新创建。再次添加所有文件并推送它们。 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
中的。这里的C
是master
分支上的最新提交。
请注意,我标记了F'
,而G'
在破折号后的 中用短划线表示。这表明这些提交实际上完全是 new 提交。重定提交通常意味着重写它们。
此外,您实际的Dashboard
分支具有来自master
的合并提交。但是,默认情况下,rebase将忽略合并提交,因此应在合并过程中将其删除以重新基于进程。