【问题标题】:How can I rebase my new code atop of old .tar.gz archives of old versions?如何在旧版本的旧 .tar.gz 存档之上重新构建新代码?
【发布时间】:2021-12-16 16:05:09
【问题描述】:

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

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

(因为这是有史以来第一次通过 git 公开推送的提交,所以我不在乎用 rebase 破坏 git-hash 历史记录。)

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

第 1 部分,准备历史树:

  1. git init 启动了一个历史.git 树
  2. 使用 cmets 一次提交一个 .tar.gz 以进行发布

第 2 部分,尝试将历史树重新定位为远程:

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

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

你会如何处理这个问题?

【问题讨论】:

    标签: git github release tar rebase


    【解决方案1】:

    如果我理解正确:

    • 您的本地开发历史如下所示:
    * 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
    

    【讨论】:

    • 原来作者的 .tar.gz 比我所基于的新的 .tar.gz 是我的提交和他的混合。我最终对我所有的旧提交和修复的冲突进行了挑选。
    猜你喜欢
    • 1970-01-01
    • 2019-03-02
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 2015-08-02
    • 1970-01-01
    • 2013-09-09
    相关资源
    最近更新 更多