Git 在分支之间划分提交

Git divide commits between branches

目前我有我的远程开发分支,提交如下:

C1 -> C2 -> C3 -> C4 -> C5 -> C6

(Cx 作为提交 x)

我需要将这些提交划分到新的分支,所以它看起来像这样:

开发分支:C1 C2 C6

NewBranchTwo: C3 C5

新分支三:C4

NewBranchTwoNewBranchThree不需要变远程)

我怎样才能做到这一点?

git rebase是你的朋友。

实现此目的的一种简单方法是使用 git branch 生成三个相同的分支(Develop、NewBranchTwo、NewBranchThree),然后使用

对其进行编辑
git rebase --interactive C1

...用提交的哈希值或其他引用替换 C1。在交互模式下,git 将首先弹出一个文本编辑器,它会向您显示整个历史记录,并且根据您在编辑器中所做的任何删除或重新排序,提交将按从上到下的顺序应用。您可以轻松删除 C3 到 C5 进行开发,并对其他分支进行相应的编辑。

您也可以跳过交互模式并使用 git resetgit rebase --onto 将 C6 移到 C2 上并将其命名为 Develop,同样将 C3 移到上游头上,将 C5 移到上游头上(等等) ).在不知道 C1 的实际哈希值或父级的情况下,我会将实际命令留给 git rebase documentation.

(你把 放在你的标签中,但是如果你试图划分提交,git revert 将无济于事:它记录 撤消现有提交的新提交不擦除它们。如果你想让历史看起来像它现在的样子,而不是 C1 C2 C3 C4 C5 C6 rev-C5 rev-C4 rev-C3,你需要变基或以其他方式编辑历史。)


您可能已经知道,任何时候您调整已经发生的提交,您都会更改它们的哈希值,这可能会让已经分支的人感到困难。希望您还没有推送您的远程 Develop 分支!

我最后做了什么:

开发:C1 C2 C3 C4 C5 C6 rev-C6 rev-C5 rev-C4 rev-C3 rev-C2 rev-C1

从开发中我创建了 NewBranchTwo 和 NewBranchThree - 所以这三个都已还原所有提交。

然后在每个分支上: 开发分支:rev-rev-C1rev-rev-C2rev-rev-C6

NewBranchTwo: rev-rev-C3 rev-rev-C5

新分支三:rev-rev-C4

所以基本上我还原了所有提交,创建了两个新分支,然后在每个分支上还原了我需要的还原提交。