如何在旧版本的旧 .tar.gz 存档之上重新设置我的新代码?

How can I rebase my new code atop of old .tar.gz archives of old versions?

我正在从事一个项目,原始开发人员在该项目中为每个新版本创建了 .tar.gz。我获取了最新版本,将其放入 .git,并在其上添加我的补丁。

经过这几个月的多次提交和更改,老开发者让我成为维护者并将其放在github 上。我想要变基,所以所有旧的 .tar.gz 版本都作为单个提交存在,然后将我的提交放在这些提交之上,以将旧版本保留在 git 历史记录中,但保留我现有的提交历史记录。

(因为这是有史以来第一个通过 git 公开推送的提交,我不关心用 rebase 破坏 git-hash 历史。)

这个解释有两个 .git 树:具有单一提交的旧历史树 .tar.gz 我称之为“历史”,另一个我称之为“新”与我的提交需要显示在所有历史提交之上。为此,我尝试了以下操作:

第1部分,准备历史树:

  1. git init
  2. 开始了历史 .git 树
  3. 一次提交 .tar.gz 并附上对发布的评论

第 2 部分,尝试将历史树变基为远程:

  1. 在“新”树上我做了 git remote add historical /path/to/historical-tree
  2. git checkout -b before-historical-rebase
  3. 一起去了一个临时测试分支
  4. 尝试过git rebase historical
  5. 有很多标记为“已修改”和一些标记为“已被我删除”的合并冲突

我认为自从最后一个 .tar.gz 的结尾与我第一次提交的开始相同,这将是干净的,但我的提交历史记录在最后一个 .[=47 的边界=] 版本和我的第一次提交并不像我想象的那么干净,或者有更好的方法来做到这一点。

你会如何处理这个问题?

如果我没理解错的话:

  • 您的本地开发历史如下所示:
* eacfdd14 (HEAD -> master) commit
* eabddd13 commit
* eaacdd12 commit
* ea0bdd11 2.2 latest version from tar.gz
  • 并且您想将其变基于 :
* cd22dfaf (historical) 2.2 latest version from tar.gz
* cd21dfae 2.1 version from tar.gz
* cd20dfad 2.0 version from tar.gz
* cd11dfac 1.1 version from tar.gz
* cd10dfab 1.0 first version from tar.gz

为避免重播最初的“tar.gz 中的最新 2.2 版本”提交,请使用带有以下参数的 git rebase

git rebase --onto historical ea0bdd11 master