如何一次提交干净分支

时间:2019-06-17 07:22:02

标签: git

我具有以下git结构: enter image description here

红色分支是主要分支,然后有许多较小的分支和提交。

我想做以下=> enter image description here

其他分支上的某些提交(不是红色的分支)的命名和内容都不好。

我想合并绿色分支中的提交,为它分配一个名称,例如v0.1,并且该提交不保留任何先前的提交。

这就像我在不进行任何编辑的情况下将所有内容从头开始推送到红色分支上一样。

我知道有可能,但是我不记得怎么做。

谢谢

2 个答案:

答案 0 :(得分:4)

我不确定您要做什么,但是在阅读您的问题时,这是其中一种情况:

  • 您是否要在单次提交中包含从bluegreenred的所有全部
    • 在分支red上时,使用git merge --squash green。这将合并在bluegreen分支中完成的所有更改,但是只有一个提交,您可以随意命名(即v0.1)。
  • 您是否要包含来自单个提交而没有的更改,而不合并来自bluegreen的其他更改?
    • red创建新分支(签出red时,请使用git checkout -b newBranch
    • 樱桃选择要包含其更改的提交(git cherry-pick <commit-id>
    • 将新分支合并到red(先检出red,然后检出git merge newBranch)。 Voilà:只有经过精心挑选的提交中的更改才会合并到您的red分支中。

答案 1 :(得分:2)

希望我能正确理解您的问题:

  

其他分支上的某些提交(不是红色的分支)的命名和内容都不好。

因此,我认为红色分支是好的,绿色分支上的某些提交是好的,有些是不好的。其他(非红色)分支也是如此。分支相对较短(具有1-2-3个提交,但没有数百个)。

  

我想合并绿色分支中的提交,为它分配一个名称,例如v0.1,并且该提交不保留任何先前的提交。

好,因此首先在红色分支中创建一个分支,这很不错:

git checkout red-branch

git checkout -b my-clean-branch

现在,如果您合并到此分支中(如git merge green),my-clean-branch也将被错误的提交污染。因此,您可以cherry-pick仅从绿色分支提交良好的提交:

git log green-branch 
// identify good commits, lets say, commits 123 and 456 are good, and commit 789 is not

// while being on my-clean-branch
git cherry-pick 123
git cherry-pick 456 // or in one command as you with

在这一点上,请确保my-clean-branch可以继续进行。您可以根据需要将其标记为v1.0(签出git tag命令)

  

这就像我在不经编辑的情况下将所有内容从头开始推送到红色分支上。

假设my-clean-branch很好,您可以将更改放入红色分支:

git checkout red-branch
git merge my-clean-branch // or rebase if you want