说,我有Repo1
如下
special -> E ... F ... G ... H
/
master -> A ... B ... C ... D ... X ... Y ... Z
如何从Repo2
开始使用master
的{{1}}?那是E
我根本不关心Repo2
之前的历史。
答案 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-patch
和git apply
是您的朋友。
答案 3 :(得分:0)
虽然可能涉及git filter-branch
,this 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