将origin / master复制到新的trunk以使用git-flow

时间:2013-12-14 17:19:00

标签: git git-flow

我想复制一个repo的origin / master,这样就有两个并排的trunk,第二个是origin / develop。我希望两个中继都具有所有相同的提交到某个点(这将创建时间origin / develop)但是如果你要查看第一个提交,则每个中继将具有不同的根。这可能吗?

基本上,我的团队有一个源/主分支可以使用,但我们想转向更像git-flow的东西,所以有多个并排的中继。鉴于我们已经拥有了所有这些历史,我们不想失去,你如何转向git-flow模型?

这是工作流程:

origin/master                              
-> Initial Commit on origin/master         
-> SHA1                                    
-> SHA2                                    
-> SHA3                                    
-> SHA4                        

===> create a duplicate of origin/master as origin/develop

                 origin/develop
                 ->same initial commit that was on master
                 ->SHA1
                 ->SHA2
                 ->SHA3
                 ->SHA4
                 ->SHA5: committed to origin/develop only
                 ->SHA6: committed to origin/develop only

<=== merge develop (SHA5 & SHA6) into master at this point

2 个答案:

答案 0 :(得分:1)

你不需要不同的根?只是从当前的主人发展分支,不要担心它。如果从新开发分支的末尾查看历史记录(git log),您将在开发分支中看到它,直到分支点,然后将历史记录返回到repo中的第一个提交。你不会失去任何历史。

答案 1 :(得分:0)

如果我理解你的问题,不,这是不可能的。每个提交都指向其父提交。修改父级将导致所有后续提交(即使修补程序相同)不同。 git rebase处理得很好,但是如果不将初始开发提交合并到master(这不是我想要的那样),则无法实现以下分支方案:

o---o--o--o--o          (branch master)
  /|| || || ||\
 o--o--o--o--o-o--o--o  (branch develop)

当您更改初始提交时,git将重新提交以下所有提交(为每个提交创建一个新哈希),如下所示:

o--o--o--o--o          (branch master)

o--o--o--o--o--o--o    (branch develop)

我不明白为什么你需要这个,但是git实际上可以帮助你通过使用合并来保存你的历史。合并时,合并分支的历史记录将与合并分支合并,因此在合并之后,您可以清楚地看到git log --graph发生了什么。

另一方面,如果你在2个分支中有不同的历史,但实际的补丁是相同的(如我的第二个插图),你可以使用git rebase使你的历史更清晰和线性,看起来像这样:

o--o--o--o--o          (branch master)
             \
              o--o--o  (branch develop)