我想复制一个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
答案 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)