如何不使用具有多个分支的rebase

时间:2012-06-11 10:43:59

标签: git git-branch git-rebase

我在同时使用多个分支的项目中使用git,即:

A ---- B ---- C
 \       \
  \       ---- D
   ---- E

根据具体情况使用每个命名项目(即我需要访问A,B和D ......)。当我修改代码时,我在更高的相关分支(我主要是A)中进行,然后我将每个分支重新绑定到新的“A”以传播差异。

因为我被告知这是一个坏习惯,因为它会产生推/拉的问题,现在我必须在我的项目中添加一个新的维护者,我想有另一种方法来做我想要的。< / p>

我被提议做条件编译,这是我在早期开发中的方式,但现在我有很多分支(目前约10个),代码变得非常难以阅读,这就是为什么我来到这个分支解决方案......

Cherry-picking看起来很棒,但是每次提交都会进行10次提交,而且我们失去了B是A的孩子的“视觉”表示......

还有其他想法,建议吗? 谢谢!

1 个答案:

答案 0 :(得分:3)

只需使用'git merge'而不是'git rebase'。

假设图表中的分支A中出现了错误。它是显示错误的最上游分支,因此这就是您修复的内容。你检查出来,编码修复,测试修复,并确认它在A上工作。然后,当你想在其他地方传播它时,你:

  1. 结帐B并将A合并到B。
  2. 结帐E并将A合并到E。
  3. 结帐C并将B合并为C.
  4. 结帐D并将B合并为D.
  5. 如果问题首先出现在B中,您将结帐B,编写修复程序,测试修复程序,然后执行第3步和第4步。

    Search for "merge upwards" on this page for more information.

    这确实会导致许多合并操作,如果您修复A,10个后代分支的父分支,则在您的示例中为10,但它也是您可以使用的最佳工作流程,不会a)驱动您的协作者坚果因为重新提交继续被推到遥控器,并且b)不会完全破坏你将分支合并到一起的能力。

    b)顺便说一下,为什么你不想要'git cherry-pick'。 Cherry-pick会将您的更改集从A传播到其他10个分支,当然,它会在它使用的每个不同分支中更改该提交的SHA1哈希值。例如,如果您稍后将B合并到A中,那么您最终会得到冗余历史记录:更改集的功能相同,但具有完全不同的SHA1哈希值。这有时并不是什么大不了的事,但if you codify it into your workflow, it will fail you in miserable ways.冗余合并历史也破坏了'git bisect'和'git rebase',几乎不可能阅读。对于这种分支模型,请避免使用'git cherry-pick'。