我有一种情况,我有一个功能分支方式领先于我的主人,所以 我的分支看起来像:
A---B---C master
\
E---F-(~60 commits)-Z feature-1
Master在合并基础之前只提交了一些提交。 在主人身上重新定位特征-1会变得很糟糕,因为会有大量的冲突。此外,feature-1不是我的分支,所以我不确定如何解决它们。
然而,在轻微的冲突解决方案中,对feature-1的变基础主人很容易。
我的问题是,是否有可能在feature-1上修改master,同时保持master的提交?
即。我在master上的期望结束代码状态看起来像:
A---E---F-(~60 commits)-Z---B'--C'
但我真的希望我的历史看起来像
A---B---C---E'---F'-(~60 commits)'-Z'
这是不是可能没有通过功能1的巨大痛苦变化到主人身上?
仅仅为了一些背景知识,我想保持master未提交的提交的原因是另一个大的功能分支在feature-1之后从master分支。
我的实际历史看起来像是:
A---B---C---D
\ \
\ \
\ H---I---J---K feature-2
\
E---F-(~60 commits)-G feature-1
如果我将master重新命名为feature-1,则H将不再是与C相同的提交, 因此,当将feature-2重新设置为master时,这两个分支的合并基础将是A(据我所知),这将搞乱rebase进程。
这个问题是否有一个简单的解决方案,或者我只需要咬紧牙关并完成大量功能-1 - >掌握rebase?
答案 0 :(得分:0)
首先,你不应该将master
(主分支)与任何其他分支重新绑定,除非另一个分支更新了master中的所有更改,或者你知道你在做什么。因为否则,你最终会改变master上提交的哈希值,并且必须强行推动你的更改。
其次,我不知道混淆的地方,但是在master
上重新定位feature1
之后,提交的状态将按照您的期望,而不是您预期的那样,即
A---B---C---E'---F'-(~60 commits)'-Z'
第三,只有当您是使用该分支的唯一用户时,才应将rebase
用于分支。通常情况下,merging
分支比rebase
更安全,更可行,但您不会再获得线性历史记录。此外,使用merge
策略可以避免中间冲突,因为它只考虑两个分支的最终状态。
git checkout master
git merge feature1
但是,如果你想保持线性历史,那么
git fetch
git rebase origin/master master
git checkout feature1
git rebase master
# resolve any conflicts
git checkout master
git rebase feature1
# Do the same for feature2, when the need arises.