1

言って、私は次のように持ってRepo1います

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

からを開始するRepo2にはどうすればよいですか? それは、私が歴史にまったく関心がないからです。masterERepo2E

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 リポジトリを初期化し、他のコミットを移動します。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 に答える