将所有代码从master转移到新分支并从master中删除代码

时间:2014-01-28 13:28:16

标签: git

我的代码在我项目的主分支中。我希望代码在一个单独的分支中,而不是在master中。我可以创建一个新的分支。但是在创建分支之后,是否可以从主服务器中删除所有代码,如果我以后将我的新分支重新绑定或合并到主服务器中,它会不会导致任何问题?

谢谢

1 个答案:

答案 0 :(得分:3)

这有点棘手,如果其他人已经拥有您的提交副本,则无法正常执行此操作。即如果您将主分支推送到其他人正在使用的远程存储库,或者如果人们直接从您的存储库中删除,那么就没有干净的方法可以摆脱它。

您必须重写主分支的历史记录。我们有两种情况需要在这里看一下。根据您的问题,我假设在master中,有一个提交已经创建之前要从master中删除的任何代码提交。让该提交的ID为rootcommit。如果您的代码已经有一个新的分支,则跳过步骤1和2,分支为主。

  1. git checkout master:确保你在掌握。
  2. git checkout -b my-fancy-new-branch:创建新功能分支。
  3. git checkout master:切换回主人
  4. git reset --hard rootcommit:将master重置为您自己提交之前的状态。
  5. 可选,如果您有遥控器,请从git pull --ff拉出(如果由于拉不是快进而失败,则必须重新考虑rootcommit。它包含您的部分工作)< / LI>

    事实上,如果您在处理代码时从任何遥控器拉出来,这甚至可以工作。如果您希望在远程提交的基础上提交提交,可以在远程更改中重新设置新分支:

    git checkout my-fancy-new-branch
    git rebase master
    

    要将这些更改应用到遥控器,这是可能的,但巨大的麻烦,您必须立即对master进行强制推送。每个人都拥有该存储库的克隆,在拉动时必须特别小心,因为主人的历史已经改变。他们必须执行与您相同的步骤,然后拉动然后重新应用他们的本地更改(如果有的话)。要执行强制推送,您必须执行:

    git checkout master
    git push --force
    

    如上所述,强行推动真是邪恶,你可能应该避免它。如果可以,只需将提交保留在历史记录中,并在下次更好地完成。