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?
如何让 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?