我把一些文件添加到了错误的仓库中,直到后来才意识到,而这些文件已经有了相当多的历史记录(只是线性修订,没有分支或其他内容)。
是否有可能将这些文件及其历史记录一起移动到另一个git仓库中?我不在乎它们的残余是否留在当前仓库中,只要新仓库拥有所有内容即可。
我把一些文件添加到了错误的仓库中,直到后来才意识到,而这些文件已经有了相当多的历史记录(只是线性修订,没有分支或其他内容)。
是否有可能将这些文件及其历史记录一起移动到另一个git仓库中?我不在乎它们的残余是否留在当前仓库中,只要新仓库拥有所有内容即可。
git log -p <filename> > <patchfile>
(参见 doc),可以导出文件的整个历史记录,然后通过 git apply --reverse --index <patchfile>
将其应用于其他仓库。但是,这并不会重新创建提交记录,我还 没有找到 用于执行此操作的 git-apply
开关。git apply --reverse --indexed <patchfile>
会返回错误信息:error: unknown option 'indexed'
。 - oschrenk你可以按照以下步骤进行操作。
git fetch
从错误的代码库将包含所需文件的分支的最新提交拉取到正确的代码库中。git filter-branch
结合 --tree-filter
或者 --index-filter
命令,将拉取的分支中除所需文件以外的所有内容删除。git rebase
或者重新将整理过的提交应用到正确的代码库的适当主分支上。你可以尝试在你正在重构的分支上使用 git format-patch
命令,为该仓库上最后一次不正确提交生成补丁。
请参考这个 Stack Overflow 问题。
然后你可以将这些补丁应用到正确的仓库中。
接着你需要使用 reset --hard
命令来清除多余的提交。