红色分支是主要分支,然后有许多较小的分支和提交。
其他分支上的某些提交(不是红色的分支)的命名和内容都不好。
我想合并绿色分支中的提交,为它分配一个名称,例如v0.1,并且该提交不保留任何先前的提交。
这就像我在不进行任何编辑的情况下将所有内容从头开始推送到红色分支上一样。
我知道有可能,但是我不记得怎么做。
谢谢
答案 0 :(得分:4)
我不确定您要做什么,但是在阅读您的问题时,这是其中一种情况:
blue
和green
到red
的所有全部?
red
上时,使用git merge --squash green
。这将合并在blue
和green
分支中完成的所有更改,但是只有一个提交,您可以随意命名(即v0.1
)。blue
和green
的其他更改?
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