gitはフィルタリングされたリポジトリを元の親リポジトリに返します。

gitはフィルタリングされたリポジトリを元の親リポジトリに返します。

Gitフィルタリングブランチを元に戻したいのですが、これを行う最善の方法を知りたいのですが。

最初は次のようなリポジトリがありました。

A
  p
  q
  r

その後、qを独自のリポジトリにしたので、次のようになります。

A
  p
  r  
Q

今度は何度もコミットした後、qを元の親であるAに返すように操作を逆にしたいと思います。 QをAqに返し、すべての履歴を保持する方法は?

答え1

私はいくつかの方法を考えました。心を変えて他のマイナーなことを試すために、リポジトリのレプリカでこれらの作業を試すことをお勧めします。 (誤って唯一のレプリカでこれを実行しても、git resetrefログを使用して回復可能である必要があります。)

  1. git subtree--squashいいえ。これはあなたが望むものに十分近いことをすることができます。 A内のコマンドはgit subtree add -P q git://user@host/path/Q.git masterAに似ています。

  2. より多くのカスタマイズが必要な場合に使用できます。サブツリーのマージ(私はgit-subtreeが内部的に使用されると確信しています)。 Aはまだ早送りできます。

  3. git-filter-branchは基本的に何でもできます。リポジトリをマージできない理由はありません。たとえば、QをAのブランチにドラッグし、ブランチをフィルタリングしてすべてのqサブディレクトリの下に移動し、マスターにマージすることができます--allow-unrelated-histories。などのフィルタを使用して、コミットをレコードにまとめることができます(もちろん、これにより多くのコミットIDが変更されるため、注意がない限り、Aはいいえ早送り可能)

PS:Unix / Linuxシステムで実行されているプログラムに関する質問はここでは問題ありませんが、git(およびその他の開発ツール)に関するより多くの専門知識があります。スタックオーバーフロー。それはあなた次第ですが、私は個人的にあなたがより速く、より良い答えを得ると思うので、そこからgitの質問をします。

関連情報