如何移动E..H提交到一个单独的存储库?

时间:2012-11-14 07:36:13

标签: git dvcs

说,我有Repo1如下

special ->                      E ... F ... G ... H
                               /
master  ->  A ... B ... C ... D ... X ... Y ... Z

如何从Repo2开始使用master的{​​{1}}?那是E我根本不关心Repo2之前的历史。

4 个答案:

答案 0 :(得分:3)

如果要保留的历史记录包含合并,最简单的方法可能是使用移植来临时切断不需要的历史记录,然后使用filter-branch创建一个将历史视图视为永久历史记录的分支。

cd /path/to/repo
git checkout -b newbranch special
git rev-parse E > .git/info/grafts
git filter-branch
rm .git/info/grafts

这假设您目前没有任何移植物。由于很少使用移植物,无论如何在新的克隆中进行移植可能是个好主意,这应该不是问题。

答案 1 :(得分:1)

git checkout --orphan newbranch E
git commit -c E
git cherry-pick F..H
git init --bare /path/to/new/repo
git push /path/to/new/repo HEAD:master

答案 2 :(得分:0)

简单明了的方法:查看E并制作工作目录的副本,但请确保不随身携带.git目录。现在从那里初始化一个新的git repo并移动其他提交。 git format-patchgit apply是您的朋友。

答案 3 :(得分:0)

虽然可能涉及git filter-branchthis article会提供包含补丁的原始解决方案:

  

创建一堆补丁,如下所示:

git checkout find-ls
git format-patch 9758db3 # where find-ls branched
  

如果您需要让新的repo具有不同的结构,则可能需要修改补丁。我刚刚用过:

perl -pi -E 's|LEADING-DIR/||g' *.patch
  

然后您可以应用补丁:

mv 0*.patch where/I/want/my/new/repo
cd where/I/want/my/new/repo
git am *.patch