1

说,我有Repo1如下

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

我该如何Repo2开始masterE那是因为Repo2我以前根本不关心历史E

4

4 回答 4

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

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

于 2012-11-14T09:22:54.690 回答
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
于 2012-11-14T08:18:31.173 回答
0

简单明了的方法:检查 E 并制作工作目录的副本,但请确保不要携带 .git 目录。现在从那里初始化一个新的 git repo 并将其他提交移过来。git format-patch并且git apply是你的朋友。

于 2012-11-14T07:52:48.540 回答
0

虽然git filter-branch可能涉及,但本文给出了一个带有补丁的原始解决方案:

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

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

如果你需要让你的新仓库有不同的结构,你可能需要破解补丁。我刚用过:

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
于 2012-11-14T07:53:28.617 回答