繁体   English   中英

Git除法在分支之间提交

[英]Git divide commits between branches

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

C1 > C2 > C3 > C4 > C5 > C6

(Cx作为提交x)

我需要将这些提交划分为新的分支,因此它将如下所示:

开发分支: C1 C2 C6

NewBranchTwo: C3 C5

NewBranchThree: C4

NewBranchTwoNewBranchThree不需要成为远程对象)

我怎样才能做到这一点?

git rebase是您的朋友。

一种简单的方法是使用git branch生成三个相同的分支(Develop,NewBranchTwo,NewBranchThree),然后使用以下命令对其进行编辑

git rebase --interactive C1

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

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

(您将放入了标签中,但是如果您尝试划分提交, 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

NewBranchThree: rev-rev-C4

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM