【问题标题】:Shifting all code from master to a new branch and removing the code from master将所有代码从 master 转移到新分支并从 master 中删除代码
【发布时间】:2014-02-19 19:51:46
【问题描述】:

我的代码在项目的主分支中。我希望代码在一个单独的分支中,而不是在主分支中。我可以创建一个新的 master 分支。但是在创建分支之后,是否可以从 master 中删除所有代码,这样如果我稍后将我的新分支 rebase 或合并到 master 中就不会造成任何问题?

谢谢

【问题讨论】:

  • 你提交并推送到远程了吗?
  • 是的,我已经推送到远程,我想在远程本身上创建一个新分支并将所有代码从主分支转移到新分支

标签: git


【解决方案1】:

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

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

  1. git checkout master: 确保你是master。
  2. git checkout -b my-fancy-new-branch:创建您的新功能分支。
  3. git checkout master:切换回master
  4. git reset --hard rootcommit:将 master 重置为您自己提交之前的状态。
  5. 可选,如果你有一个遥控器,你可以从:git pull --ff(如果因为拉动不是快进而失败,你必须重新考虑rootcommit。它包含你的一些工作)

事实上,如果您在处理代码时从任何遥控器拉出,这甚至应该可以工作。如果你想让你的提交在来自远程的提交之上,你可以在远程更改上重新设置你的新分支:

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

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

git checkout master
git push --force

如前所述,强制推确实是邪恶的,你可能应该避免它。如果可以的话,把这些提交留在历史中,下次做得更好。

【讨论】:

    猜你喜欢
    • 2016-01-20
    • 2013-02-28
    • 2011-10-13
    • 1970-01-01
    • 2014-11-27
    • 2011-09-09
    • 2021-05-31
    • 2018-07-24
    • 2015-09-07
    相关资源
    最近更新 更多