古いリポジトリからコミットを取り出し、git rebase
を使用して古いリポジトリの上に新しいリポジトリの履歴を再生することで、これを簡単に行うことができます。
まず、古いリポジトリからコミットを取得します。
git remote add old_repo <url-for-old-repo> # Add old repository as a remote
git fetch old_repo # Fetch commits from old repo
次に、新しいリポジトリのルートコミットと一致する古いリポジトリのコミットを見つけます。この目的にはgit log
が役立ちます。 git diff <commit in old repo> <commit in new repo>
を実行し、そのコマンドの出力がないことを確認することによって、コミットの内容が一致していることを確認できます。そのコマンドからの出力がある場合、その出力を生成しない古いリポジトリでコミットを見つけるまで、または古いリポジトリで同様のコミットをチェックアウトして、作業に必要な変更を加えることによって、ディレクトリ、およびコミット)。
このコミットが見つかったら、即時子新しいコミットのコミットを見つけてください。これは、古いリポジトリにはない新しいの変更を導入する新しいリポジトリの最初のコミットでなければなりません。このコミットは、以前のリポジトリで見つかったコミットとともに、次のコマンドで使用します。
ラン:
git checkout master
git rebase --onto <commit from old repo> <commit from new repo> --preserve-merges
これは古いレポに新しいリポジトリからコミットを再生する必要があります。以前のgit diff
の出力が空白だったと仮定すると、マージの競合は発生しません。コマンドが完了したら、master
ブランチには古いリポジトリの履歴が含まれている必要があります。
この手順ではリポジトリの履歴を変更する必要があるため、次にリモートブランチにマスターブランチをプッシュするときは、--force
オプションを使用する必要があります。
あなたがマスター以外の他の支店を持っている場合は、新しいリポジトリにそれらを上に移動するには、上記1と同様の手順に従う必要があります:
git checkout branchname
git rebase --onto <base on new master branch> <first commit in branch> --preserve-merges
タグは、おそらく彼らのように、移動しないでください不変であることを意味する。タグを新しい履歴に実際に移動する場合は、How can I move a tag on a git branch to a different commit?をご覧ください。
偉大な答えのためにねえ、Thx! –