Git Discipline:结合多个功能分支,但仍然将它们分开?

Kar*_*ine 24 git git-branch

我正在研究的当前项目,我正在尝试探索一堆通常表现为一堆功能分支的不同想法.我正在处理的功能通常是彼此正交的,所以有时我想合并所有这些功能(或功能的某些子集)并一起测试它们.

到目前为止,我的工作流程一直是这个-我有分支机构featureA,featureB,featureC我会呼吁一个分支featureA_featureB,然后又一个像featureA_featureB_featureC

我有两个问题:

  • 命名方案非常麻烦,并产生大量的分支混乱
  • 由于我正在使用合并在一起的功能测试分支,因此我倾向于意外地提交组合分支而不是单个分支.所以,例如,我想到了一个改进featureC,但由于我在featureA_featureC分支,我不小心提交到这个分支(我真的需要停止使用git commit -a).然后,我必须挑选提交或做一些其他疯狂的事情,以使提交到正确的地方.
  • 我觉得有更好的方法来实现这个目标......

提前致谢!

Mar*_*ski 9

我打算写一个我自己的答案,但后来我发现了这个很棒的答案(也是一个很好的问题).它不会为您提供单一的方法,但仔细阅读后,您应该能够找到适合您情况的工作流程.

  • @MarcinZalewski:您指的是哪个答案? (2认同)

ral*_*nja 6

我有一个共同的分支,例如“开发”,我所有的功能分支都会从那里分支出来。

develop
|----featureA
|----featureB
|----featureC
Run Code Online (Sandbox Code Playgroud)

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

git checkout develop
git merge featureA featureB
./test.sh
Run Code Online (Sandbox Code Playgroud)

如果您对测试感到满意,请保持提交。如果不做

git reset --hard HEAD^
Run Code Online (Sandbox Code Playgroud)

并且您将按照合并之前的方式进行开发。这样你只需要你的功能分支,你可以用任何组合来试验它们。请记住,只要您提交了任何内容,您就可以通过检查 reflog 始终恢复到该状态。

对于你的git commit -a问题,做

git reset --soft HEAD^
Run Code Online (Sandbox Code Playgroud)

并且您拥有提交之前的索引。然后只需切换到另一个分支并在那里提交。