如何压缩将另一个 repo 集成到分支中的旧提交?

How to squash old commits coming from integrating another repo into a branch?

我正在努力将两个存储库合并为一个存储库。

我将 repo2 集成到 repo1 的一个分支中,保留了 repo2 的所有历史记录.之后,我做了额外的提交来完成代码集成。

问题是现在我决定不想保留 repo2 的历史记录,因为提交次数非常多。因此,我尝试执行交互式变基。这里的问题是 repo2 的历史记录包含日期可以追溯到一年前的提交。

在新分支中添加的提交如下所示:

680a4b3  Integration          2 days ago
...
985d7ac  Integration          6 days ago    
23d3762  Latest repo2 commit  2020‑04‑20
...
23df1e4  First repo2 commit   2019‑05‑01

当我尝试执行交互式变基回到第一个 repo2 提交时:

git rebase 23df1e4 ---interactive

提交列表包括来自 repo1repo2 的提交。手动挑选它们会花费太多时间。

有什么方法可以压缩(或修复、丢弃消息)所有 repo2 自动提交,但保留 "Integration" 的吗?

也许可以执行一个只包含来自当前分支的提交的变基,但我还没有找到如何做到这一点。

非常感谢您。

这里有一个方法可以压缩历史的开端:

  1. 运行 rebase -i 从 "Latest repo2 commit" 的父级开始:

    git rebase -i 23d3762^
    
  2. 在actions中,将commit 23d3762 Latest repo2 commit的动作设置为edit,保存并关闭
    git会倒回23d3762,等你行动

  3. squash repo2 的历史:

    # use 'reset --soft' to go back to First commit,
    # while keeping the complete delta in the staging area :
    git reset --soft 23df1e4   # <- use id of "First commit" here
    git commit
    
  4. 告诉git完成交互式rebase

    git rebase --continue