Cherry-pick 并将一系列提交压缩到子目录或子树中

Cherry-pick and squash a range of commits into a subdirectory or subtree

如何让 cherry-pick 选择提交范围并压缩它?

或者换句话说,将两次提交之间的差异应用于存储库的当前状态?

以下 工作(cherry-pick 没有 --squash 选项):

git cherry-pick --squash e064480..eab48b59c

注意:我的用例是在一个子树场景中——在任何人开始争论我不应该压缩之前。

以下工作正常,但我有一系列单独的提交。之后我可以使用交互式 rebase 手动压缩它们。

git cherry-pick -X subtree=vendor/package e064480..eab48b59c

有什么方法可以将压缩作为 cherry-pick 的一部分吗?

-n 传递给 git cherry-pick。这将应用所有提交,但不提交它们。然后只需执行 git commit 即可在一次提交中提交所有更改。

跟随 master → cherry 从另一个分支中挑选两个提交

git checkout master
git cherry-pick :1  
git cherry-pick :2
git reset --soft HEAD~2 (number of cherry pick commits, i.e 2 ) 
git add . 
git commit

对于某些用例,与 git cherry-pick -n 相比,有用的替代方案可能是 git merge --squash - 例如,当您想在集成分支之上测试功能分支的更改时,无需变基。

来源:What's the difference between git merge --squash and git cherry-pick?