2011-02-22 49 views
20

我正在研究的当前项目,我试图探索一系列不同的想法,这些想法通常表现为一组功能分支。我正在使用的功能通常彼此正交,所以有时候我想合并所有这些功能(或功能的某些子集)并一起测试它们。Git Discipline:结合多个功能分支,但仍然保持分开?

到目前为止,我的工作流程一直是这个 - 我有分支机构featureAfeatureBfeatureC,我将有一个分支叫featureA_featureB然后又是一个像featureA_featureB_featureC

我有2个问题:

  • 命名方案是非常繁琐的,并产生了很多分支杂波
  • 由于我与合并在一起的功能测试分支,我倾向于不小心犯的组合分支而不是个别分支。因此,例如,我认为对featureC的改进,但由于我在分支,我不小心承诺此分支(我真的需要停止使用git commit -a)。然后,我必须选择提交或做一些其他疯狂的东西,以承诺正确的地方。
  • 我只是觉得有一些更好的方式来做到这一点...

提前感谢!

+0

3个问题;)否则,一个很好的问题。 – user1284631 2013-11-21 13:31:41

+0

@axeoth - 哈哈,touche - 我想第三个不是一个真正的问题 - 它不应该有一个要点。 – KarateSnowMachine 2013-11-21 16:45:29

回答

6

我打算写一个自己的答案,但后来我发现这个great answer(和一个很好的问题)。它不会给你一种做事的单一方式,但仔细阅读后,你应该能够找到适合你情况的工作流程。

+1

+1不重新发明车轮。 – Abizern 2011-02-22 18:54:57

3

我会有一个共同的分母,例如“develop”,其中我所有的功能分支将从中分支出来。

develop 
|----featureA 
|----featureB 
|----featureC 

然后,一旦你想测试出来的东西,只是从功能分支合并到你想要的组合,例如开发

git checkout develop 
git merge featureA featureB 
./test.sh 

并保持提交,如果你对测试满意。如果不行的话

git reset --hard HEAD^ 

然后你又回到了开始合并之前的状态。这样你只需要你的功能分支,你可以用任何组合对它们进行试验。只要记住,只要你承诺任何事情,你总是可以通过检查reflog来恢复到该状态。

而且为你git commit -a problems,做

git reset --soft HEAD^ 

,你有索引,这只是你所做的承诺前的样子。然后切换到另一个分支,并在那里提交。