将一个回购合并到另一个回购的历史中

时间:2013-08-12 00:47:46

标签: git version-control github

让我们称之为原始状态A。

我通过状态F将状态B提交到回购1.状态B代表状态A的修改版本。我犯了错误,即在回购1中没有提交状态A到B.

在回购2中,我在状态A中添加了原始来源的副本。然后,我进行了更改,使其看起来像状态B(在回购1中不是字面上的状态B,但是类似于它)。然后,我在Repo 1中手动对状态B进行了更改,使其看起来像状态F(在字面意义上不像回购1中的状态F,但类似于它)。然后,我从状态F更改为状态当前。

我想将Repo 1和Repo 2合并为一个逻辑历史时间轴。我不希望Repo 2中的任何当前文件(代表旧状态)处于Repo 1的当前状态。

最简单的方法是什么?有什么建议吗?

1 个答案:

答案 0 :(得分:1)

听起来你想要添加状态A作为第一个回购的根目录。您可以通过以下方式找到相关说明:

  1. git: how to insert a commit as the first, shifting all the others?
  2. Git: how to add commits before first/initial/root commit?
  3. How to add retro commits to a git repository?
  4. 您基本上想要将状态A添加到孤立分支中的第一个回购,然后使用带有rebase--root标记的--onto来移动旧历史记录A的顶部。

    选项2

    不是使用状态A创建孤立分支,而是将硬盘重置为状态A,将repo 1添加为远程,获取repo 1的历史记录,然后将历史回归到状态A

    # In repo 2
    git reset --hard A
    git add remote repo1 <path-or-url-to-repo1>
    git fetch repo1
    git checkout <branch-with-state-A>
    git rebase --onto A --root repo1/<remote-branch-with-B-through-F>