如何在多个分支上工作时如何组合在一起以创建一个简单的补丁工作流程



我正在与本地化合作,这是一个迭代40多个分支的过程,每个分支都在每个分支上实现了大约40个投入。其中一些(例如,一半(,几乎所有分支都完全相同。因此,我开始将提交ID(例如085CFEFC9291B(复制到记事本中,然后当我希望在当前分支上实施这些更改时,我会从该列表中进行挑选。

我为 cherry-pick的提交列表(例如, git cherry-pick 290d953c2837(:

  • 290D953C2837->产品矩阵的更新(2017-02(,
  • 9EE8C001165E6->结果与福利的jsonify(2017-02(
  • 13156CEE10D->实施双后端/产品范围的前端
  • 80C98C492->切换后端过滤
  • 15106BDC->在包装中包括椭圆形(Fusion2(
  • 085CFEFC9291B->排除Frontend的产品范围

这些提交来自同一存储库的不同分支。

确实非常适合我的工作流程,将是一种将这些承诺捆绑在一起的方式。这将使我能够沿途动态创建补丁,如果我保持单个商业的长列表,我可以很容易地创建不同版本的补丁,其中一些内容中有更多的提交,有些则更少。

您知道哪些最佳实践?

  1. 从适当的提交创建一个分支。
  2. 将提交子集应用于该分支。
  3. 将这些更改挤入一个提交中。

假设您有一组提交{A,B,C,D,E,F,G}和一个基础提交Z。挤压A B C F的过程就像:

#create a branch patch1 from Z
git checkout -b patch1 Z
#apply A B C F
git cherry-pick A B C F
#squash them into one commit
git reset Z --soft
git commit -m 'squash A B C F'
#create a patch of the new commit if necessary
git format-patch -1

这只是创建这样的合并提交的可能方法之一。而且很难确定哪个提交可能是适当的基础。

另一种方法:

#create a branch patch1 from G
git branch patch1 G
#rebase and squash A B C F onto Z
git rebase -i --onto Z A^..patch1
#in the editor
  pick A
  squash B
  squash C
  squash F
#create a patch of the new commit if necessary
git format-patch -1

最新更新