2015-04-16 60 views
3

我有一种情况。假设两位开发人员正在研究两个不同的分支ABgit - 暂时将其他分支合并到我当前的分支

-- master -- 
|   | 
A  <-- B 

B依赖于A变化。但是,A中的更改尚未合并到master中。我想开始处理我的功能(分支B),并对A进行更改,然后在完成测试时将其丢弃。推荐的方式是什么?

+2

它并不真正清楚自己想要什么,但我觉得你只是想基于B开始一个新的分支C,A的合并C,那么一旦你做了C.工作,删除C. – chepner

+0

呀。如何在测试C中的更改后放弃合并A. – Conans

+0

只需删除C('git branch -D C')。你仍然会有A和B.Git分支是轻量级的,意味着经常创建/删除。或者保留C来进行测试,在B上工作并将其他更改从B合并到C中,以便对其进行测试(尽量避免在C上进行任何非合并提交,对A或B执行所有工作并仅合并到C中测试)。 –

回答

2

假设分支B当前正在提交abc1234。最直接的回答你的问题是

git checkout B 
git merge A 
# run your tests 
git reset --hard abc1234 

但正如其他人所说的,这是真的真的真的奇怪的工作流程。如果B依赖于A,为什么要首先拆分分支?也许你想要第三个“集成”分支?

+0

我发现这是一个奇怪的工作流程。我将B合并到A并开始工作A.感谢您的回应。 – Conans

0

有两种有效的方法可以解决这个:

  1. 你做一个完整的,正常的合并。这是最简单的方法,git不关心你多次来回合并,它可以把它整理出来。这种方法是最诚实的:您的更改取决于其他分支所做的工作,因此这反映在记录的历史记录中。

    这种方法唯一的问题是人们(可能有SVN或类似的背景)谁想要保留线性历史记录在master,或包含官方发展历史的SVN存储库。

  2. 您将您的工作重新分配到另一个分支。有些人喜欢这样,因为它保留了线性历史记录,并且可以更容易地与上游SVN存储库进行交互。不利的一面是,你对历史撒谎(请参阅我的answer关于另一个SO问题,了解更多关于为什么这是有问题的细节)。所以,如果您选择重新绑定,您应该确保至少编译测试您的新提交。

    这种方法的另一个缺点是,每次需要在另一个分支(包括主设备)上绘制更改以保留线性历史记录时,您需要重新整理整个工作。并重新测试新的rebase创建的所有新提交。

    这就是为什么我非常喜欢合并的方法:它允许在任何时候合并,唯一需要测试的新提交是合并提交。我之前的所有提交保持不变,不需要重新测试。

相关问题