Git 在分支之间划分提交
Git divide commits between branches
目前我有我的远程开发分支,提交如下:
C1
-> C2
-> C3
-> C4
-> C5
-> C6
(Cx 作为提交 x)
我需要将这些提交划分到新的分支,所以它看起来像这样:
开发分支:C1
C2
C6
NewBranchTwo: C3
C5
新分支三:C4
(NewBranchTwo
和NewBranchThree
不需要变远程)
我怎样才能做到这一点?
git rebase
是你的朋友。
实现此目的的一种简单方法是使用 git branch
生成三个相同的分支(Develop、NewBranchTwo、NewBranchThree),然后使用
对其进行编辑
git rebase --interactive C1
...用提交的哈希值或其他引用替换 C1。在交互模式下,git 将首先弹出一个文本编辑器,它会向您显示整个历史记录,并且根据您在编辑器中所做的任何删除或重新排序,提交将按从上到下的顺序应用。您可以轻松删除 C3 到 C5 进行开发,并对其他分支进行相应的编辑。
您也可以跳过交互模式并使用 git reset
和 git rebase --onto
将 C6 移到 C2 上并将其命名为 Develop,同样将 C3 移到上游头上,将 C5 移到上游头上(等等) ).在不知道 C1 的实际哈希值或父级的情况下,我会将实际命令留给 git rebase documentation.
(你把 git-revert 放在你的标签中,但是如果你试图划分提交,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-C1
rev-rev-C2
rev-rev-C6
NewBranchTwo: rev-rev-C3
rev-rev-C5
新分支三:rev-rev-C4
所以基本上我还原了所有提交,创建了两个新分支,然后在每个分支上还原了我需要的还原提交。
目前我有我的远程开发分支,提交如下:
C1
-> C2
-> C3
-> C4
-> C5
-> C6
(Cx 作为提交 x)
我需要将这些提交划分到新的分支,所以它看起来像这样:
开发分支:C1
C2
C6
NewBranchTwo: C3
C5
新分支三:C4
(NewBranchTwo
和NewBranchThree
不需要变远程)
我怎样才能做到这一点?
git rebase
是你的朋友。
实现此目的的一种简单方法是使用 git branch
生成三个相同的分支(Develop、NewBranchTwo、NewBranchThree),然后使用
git rebase --interactive C1
...用提交的哈希值或其他引用替换 C1。在交互模式下,git 将首先弹出一个文本编辑器,它会向您显示整个历史记录,并且根据您在编辑器中所做的任何删除或重新排序,提交将按从上到下的顺序应用。您可以轻松删除 C3 到 C5 进行开发,并对其他分支进行相应的编辑。
您也可以跳过交互模式并使用 git reset
和 git rebase --onto
将 C6 移到 C2 上并将其命名为 Develop,同样将 C3 移到上游头上,将 C5 移到上游头上(等等) ).在不知道 C1 的实际哈希值或父级的情况下,我会将实际命令留给 git rebase documentation.
(你把 git-revert 放在你的标签中,但是如果你试图划分提交,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-C1
rev-rev-C2
rev-rev-C6
NewBranchTwo: rev-rev-C3
rev-rev-C5
新分支三:rev-rev-C4
所以基本上我还原了所有提交,创建了两个新分支,然后在每个分支上还原了我需要的还原提交。