是否可以将一堆文件从一个git存储库移动到另一个git存储库,同时保留(大多数)历史记录?

时间:2010-07-07 07:52:49

标签: git

我在错误的存储库中添加了一些文件,直到后来才知道它们已经有了相当多的历史(只是线性修订,没有分支或任何东西)。

是否可以获取这些文件并将它们与历史记录一起移动到另一个git存储库?我不在乎他们的残余物是否留在他们当前的残余物中,只要新的残留物都可以。

3 个答案:

答案 0 :(得分:2)

使用git log -p <filename> > <patchfile>(请参阅doc),您可以导出文件的整个历史记录,然后通过git apply --reverse --index <patchfile>将其应用于其他仓库。但是,这不会重新创建提交,而git-apply会{{1}}切换提交。

如果您想删除原始仓库中的文件,请参阅haven't figured out

答案 1 :(得分:1)

您可以执行以下操作。

  1. 使用git fetch将所需文件从错误的存储库中拉出分支的一端到正确的存储库中。
  2. git filter-branch--tree-filter--index-filter一起使用,以删除所提取分支中所需文件以外的所有内容。
  3. 使用git rebase或将整理后的提交重新应用到右侧存储库中的相应主分支上。

答案 2 :(得分:0)

您可以在重新加工的分支上尝试git format-patch,以便为该回购上不正确的最后一次提交生成补丁。
请参阅this SO question

然后,您将在正确的仓库上应用这些路径 你会reset --hard当前的分支,以摆脱额外的提交。