Git:在新分支中重新开始,从历史记录中删除提交

Sus*_*syP 5 git version-control github

第一个问题在这里!

我们正在使用 git 进行项目的版本控制。我们的仓库看起来像这样:

master: C0-C1-C2-C3-C4
                \            
    development: C5-C6-C7
Run Code Online (Sandbox Code Playgroud)

当我们开始项目时,我们被建议使用 gitflow 工作流程。无论如何,由于我们是一个小团队,之前没有 git 经验,正在开发一个相当小的项目,所以我们现在认为这可能有点过头了。相反,我们想开始使用功能分支模型

长话短说,我们想要这样的东西:

master: C0-C1-C2-C5-C6-C7
Run Code Online (Sandbox Code Playgroud)

因此,从 C7 开始,我们可以“从头开始”(但保留我们迄今为止所做的事情),但现在使用单独的功能分支。

正如您所看到的,我们还想删除C3C4这是因为它们完全无用(这些提交添加了一些在C6C7中添加的文件),而且还因为我们希望从一个干净的主分支开始,而不在历史记录中进行合并。

我以为这会很简单,但经过几个小时的谷歌搜索后,我有点迷失了。我读到有关创建新的孤立分支、复制 C7 的内容然后删除其他分支的信息,但我不确定这是否是正确的方法。

哦,顺便说一句,我们无法创建新的存储库。这是在学术课程中向我们提供的私人回购协议,也是我们唯一拥有的。

提前致谢。

Sch*_*ern 2

你要

C0-C1-C2-C5-C6-C7 [master]
Run Code Online (Sandbox Code Playgroud)

当您像这样查看存储库时,问题会变得更简单。

C0-C1-C2-C5-C6-C7 [development]
       \
        C3-C4 [master]
Run Code Online (Sandbox Code Playgroud)

“分支”只是提交上的标签。您可以根据需要对它们进行重命名和移动。development已经是你想去的地方了master。因此重命名masterdevelopment.

git branch -m master old/master
git branch -m development master
Run Code Online (Sandbox Code Playgroud)

哒哒!

C0-C1-C2-C5-C6-C7 [master]
       \
        C3-C4 [old/master]
Run Code Online (Sandbox Code Playgroud)

由于您的master遥控器与遥控器不同,因此master您需要强制推送。

git push -u --force origin master
Run Code Online (Sandbox Code Playgroud)

-u将确保您的新master分支跟踪远程master.

最后,当你准备好后,删除old/master.

git branch -D old/master
Run Code Online (Sandbox Code Playgroud)

在一段时间内,它仍然可以通过 恢复git reflog