提取部分git repo的git历史记录以创建git子模块-Cherry-pick?

| 一个类似的问题,即如何挑选多个提交,假设这些提交是连续的。 我有一个以tarball下载的模块。我已经将其包含在主项目的git repo中,并对其进行了更改。这些更改散布在主项目的其他提交中。 我已经意识到自己的错误,并希望使用git子模块替换该模块。我可以只添加当前状态,但我想保留自己的git历史记录。 如何将每个提交提交到我的新仓库中? 我想我可以用樱桃摘来做,但是很费时间。这是我所拥有的: 使用主项目将我的新仓库设置为远程仓库(这样我就可以选择了):
cd ~/snippets
git remote add main ~/.vim/
git fetch main
我可以在主项目中看到带有“ 1”的相关提交 我可以制作一个脚本来挑选
cd ~/.vim/snippets
git log --oneline --reverse --format=\"format:git cherry-pick %h #%s\" .
但是,如果我运行脚本,则存在合并冲突。解决合并提交后,我需要从我的挑选脚本中删除成功的位,然后再次运行它。我想自动执行此操作,例如git rebase。     
已邀请:
        您可能会发现
git filter-branch
是有帮助的-如果您使用ѭ4around来移动文件,并使用
--commit-filter
来删除对分支没有影响的提交,那么您应该能够以仅包含子目录更改的分支结束项目。 如果您现在没有时间,可以使用我的其他答案作为临时措施:)。     
        如果您只想了解历史记录,而不在乎那里是否有额外的数据,则可以只创建几个分支,一个分支用于主代码,一个分支用于代码段。将代码片段上移到其分支的顶层,删除其余文件。您应该发现重命名跟踪使您可以查看文件的历史记录,尽管您显然会在历史记录中包含其他文件和提交。然后,您可以将该分支(可能克隆到单独的存储库)用作子模块。 然后,将来,如果您有更多时间,可以使用我的其他答案来清理历史记录:)。     
        听起来git-subtree可能会这样做。这是开发人员的相关博客文章。     
        这个问题显示了一种更简单的方法:
git filter-branch --subdirectory-filter repo/subdirectory -- --all
来自
git help filter-branch
:   
--subdirectory-filter <directory>
     只查看涉及给定子目录的历史记录。          结果将包含该目录(仅该目录)作为其目录          项目根目录。意味着称为“重新映射到祖先”的部分。     

要回复问题请先登录注册