如何变基 git 回购的整个主分支

How to rebase entire master branch of git repo

我是 git 的新手,如果这是一个简单的解决方案,我深表歉意。

我需要将 repo 的整个 master 分支重新设置为功能分支。回购已经完成,然后有人使用 master 作为第一个功能分支。所以,我现在拥有的是:

A -- B -- C -- D (branch: master)

而我想做的是

  A--B--C--D (branch: new-feature)
 /
Z (branch: master)

其中 Z 代表仅包含一个 .gitignore 文件(或其他一些 "repo-initializing commit" 的提交......我什至会接受一个不包含任何文件的空白提交,但我不这样做认为 git likes/allows 那个)。

我了解如何在 分支内 变基提交,因此我了解如何执行此操作:

     C--D (branch: new-feature)
    /
A--B (branch: master)

但我一直无法弄清楚如何将所有 master 变基到一个功能分支上。我相信我一直面临的问题的关键是我没有任何提交指向 master,因为没有 Z 提交(提交 A 有部分功能实现,所以我不能用 A 代替 Z) .

提前致谢!

为什么要费心变基?只需在新功能提示处合并新的主库即可。签出 master(以提供一个不错的起点)

git checkout -B feature
git branch -f master   $(git commit-tree -m 'Initial commit.' `:|git mktree`)
git merge -s ours --allow-unrelated-histories   master

生产

A ... D---E     feature
         /
        Z       master

现在历史准确地反映了所发生的一切,一切正常。

如果你真的想做变基,as the doc points out there's a --root option:

git checkout -B feature
git branch -f master   $(git commit-tree -m 'Initial commit.' `:|git mktree`)
git rebase --root --onto master

如果旧 master(新 feature)的任何分支存在于任何地方,这将导致心痛。