【问题标题】:Moving all commits beyond initial commit off master将初始提交之外的所有提交移出 master
【发布时间】:2011-10-07 01:02:37
【问题描述】:

我一直在 master 分支上开发提交,并希望将所有提交超出“初始提交”移动到单独的开发分支,并保留 master 用于发布版本。

现在,我的树看起来像这样:

master: A - B - C - D - E - F

我希望它看起来像这样:

development:   B - C - D - E - F
              /
master:      A -----------------

这样我就可以像这样合并一个版本:

development:   B - C - D - E - F --- X
              /                       \
master:      A ----------------------- Y

有人可以建议最好的方法吗?我已经看到了其他类似但不确切情况的答案,但我不想冒险把事情搞砸。

【问题讨论】:

  • 有了 git,你不必担心一旦提交就搞砸了。除非您实际上从磁盘中删除了存储库,否则您所做的任何提交都将始终存在并且可以恢复至少两周(默认情况下),然后它们才有资格进行垃圾收集。

标签: git branch commit master


【解决方案1】:

首先为提交 F 创建一个新分支(分支 master 上的最后一次提交):

git checkout -b dev master # or directly using the commit hash:
git checkout -b dev SHA1_OF_F # if master is currently checked out:
git checkout -b dev

然后,移回你的主分支(不破坏你的工作树)

git branch -f master SHA1_OF_A

如果您想继续工作,请再次结帐:

git checkout master

如果您不关心您的工作树(它是干净的,即没有未提交或未暂存的更改,您可以按照@manojlds in his answer 的建议使用git reset --hard

这会改变(即修剪)主分支的历史记录,因此请确保您了解后果。如果您的更改已被推送到公共 repo,其他用户将拥有已包含在 master 中的开发提交,并且也必须重置他们的分支。

【讨论】:

  • 我得到一个“![rejected] master -> master (non-fast-forward) error: failed to push some refs to 'git@github.com:danielbyon/GetBig.git'为了防止您丢失历史记录,非快进更新被拒绝合并远程更改(例如“git pull”),然后再次推送。有关详细信息,请参阅“git push --help”的“关于快进”部分。”当我尝试推送到 github
  • @daniel:是的,如果您之前推送过 master,如果不强制 git push 和覆盖,您将无法再次这样做,因为它会从公共存储库中删除历史记录。之前克隆了您的存储库的用户将主分支指向您最后一次主提交之后的提交。如果您绝对确定要推送(如果您是使用该 repo 的唯一开发人员也适用),请使用 git push -f origin mastergit push origin +master
【解决方案2】:

简单来说:

(on master)
git branch development
git reset --hard A

【讨论】:

    猜你喜欢
    • 2014-10-18
    • 2018-12-24
    • 2014-08-28
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 2019-02-18
    • 2020-05-04
    • 2021-03-15
    相关资源
    最近更新 更多