git - Git 中有某种反向挑选吗?

标签 git git-rebase git-cherry-pick

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相反的东西,您可以在mergerebase上插入过去的提交或某些东西或一些标志会让这更优雅吗?


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/

相关文章:

git - 列出压缩的提交

git - 在 git cherry pick 之前是否需要一个新的分支?

Git:如何在没有以前所有历史记录的情况下挑选提交

git - rebase 后缺少提交

git buggy 在更改分支时修改了文件

Git rebase递归分支

git - 我怎样才能 merge 两个git提交

git - 在特定的 GitHub 分支中搜索代码

git - merge 分支时如何防止更改被覆盖?

eclipse - Cherry pick 到 Eclipse git 中的另一个分支