在我正在处理的个人项目中,我遇到以下情况 -
N' <-- mainscreen
/
| N--O--P--Q <-- database
|/
A---B---C---D---------------------M <-- master
\ /
F--G--H--I--J--K--L <-- loginscreen
现在虽然我对git有一些基本的经验,但我从来不知道任何好的git实践,也从未参与过一个大型的复杂项目,之前我的技能停滞不前。所以我决定正确地学习它,并遵循这个项目的一些好的做法。快速搜索引导我this,我猜这是所有参考文献中的一个受欢迎的模型。
在阅读完本文后,我意识到由于我的提交中缺乏规划,loginscreen
分支中的一些代码实际上是其他分支中需要的公共代码,应该保持独立。所以我决定重写分支的历史记录,以便将公共代码分成新的develop
分支。我发现交互式变基可以用来分割提交,但我不确定这是否可行,因为我已经将loginscreen
合并到master(这可能是一个坏主意)。基本上我想做的是 -
develop
loginscreen
相关的代码在其自己的分支中且公共代码在develop
loginscreen
合并到develop
database
分支上的mainscreen
和develop
分支结果应该是这样的 -
A-----------------------M----------- <-- master
\ | N--O--P--Q <-- database
\ |/
B---C---D---G--I--K--L <-- develop
\ / \
F---H---J \ <-- loginscreen
\
N` <-- mainscreen
(G, I, K commits contain the common code)
就像我说的,这是一个个人项目,并没有被推动,所以重写历史不会有任何问题。但这有可能吗?
答案 0 :(得分:0)
我很容易用樱桃挑选解决这个问题。我需要做的就是在初始提交时创建一个名为develop
的新分支,然后挑选B,C和D.然后我为loginscreen
提交创建了一个新分支并且采摘了樱桃,分开了文件,合并分支并在必要时解决合并冲突。所有这一切导致了一个像这样的状态 -
A---------------------------------- <-- master
\
\
B---C---D--G--I--K--L--------------Q <-- develop
\ \ / \ /
F---H---J M--N--O--P <-- loginscreen
在此之后,添加mainscreen
和database
分支很简单地将提交内容提交到develop
上各自的新分支。
请记住,这将更改提交时间戳,有时还会更改作者时间戳(发生冲突时)。我没有打扰提交,但可以使用git commit --amend --date
更改作者时间戳。