tl;dr: 如何将当前的最后几次提交保留在一个分支上,并用另一个分支的历史记录替换之前的历史记录?
我有一个分支,我想保留现有的最后 3 次提交,但用另一个分支的历史记录替换历史记录。
所以我有:
E-F-G :: my-branch
/
A-B-C-D :: main
\
B'-C'-D' :: new-past
我想要
A-B-C-D :: main
\
B'-C'-D' :: new-past
\
E-F-G :: my-branch
目前我正在手动执行此操作
git checkout new-past
git pull
git checkout -b my-branch-temp
git checkout cherry-pick E
git checkout cherry-pick F
git checkout cherry-pick G
git branch -D my-branch
git branch -m my-branch
那么是否存在与cherry-pick
相反的东西,您可以在merge
或rebase
上插入过去的提交或某些东西或一些标志会让这更优雅吗?
PS-这里的情况是我位于另一个分支的子分支上,该分支正在定期重新调整基础,并且我试图避免 merge 提交。
PPS-如果不存在需要解决的频繁冲突,我会尽快编写现有流程的脚本
最佳答案
So is there some opposite of cherry-pick where you can insert the past commit
你的想法是对的,但你想多了。您可以创建一个新分支并在顶部挑选您想要的提交,而不是插入过去的提交:
git checkout -b new-past new-branch
git cherry-pick E
git cherry-pick F
git cherry-pick G
从这里,您可以删除旧分支并重命名新分支:
git branch -d my-branch
git branch -m new-branch my-branch
对于大量提交,这既麻烦又耗时。幸运的是,git 提供了一个名为 rebase
的命令,它可以执行批量挑选。它看起来像这样:
git checkout my-branch
git rebase --onto new-past my-branch~3
您可以使用任何提交,例如另一个分支、标签或提交哈希,而不是 my-branch-3
。
关于git - Git 中有某种反向挑选吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71678591/