2

この記事git replaceで説明されているように、リポジトリに履歴を移植できるように、リポジトリの履歴の一部を切り取ろうとしています。

この記事で説明されているケースと私のリポジトリの主な違いは、マスター ブランチに既存のブランチがあることです。履歴を削除した後も、これらのブランチとその分岐点のレイアウトを維持したいと考えています。

私の履歴はおおよそ次のようになります

    cut here
      |
      v
o--o--o--o--o--o--o master
            \  \  \
             \  \  o--o   A
              \  o--o--o  B
               o--o--o    C

"cut here" コミットの前に master から分岐することはありません。

私が達成したいのはこれです:

o--o--o history

initial tree at cut
        |
        v
        o--o--o--o--o master
               \  \  \
                \  \  o--o   A
                 \  o--o--o  B
                  o--o--o    C

つまり、最初のツリーでマスターをリベースするだけでは十分ではなく、マスターのリベース後に同等の新しいコミットで既存のすべてのブランチをリプレイする必要もあります。競合が発生する可能性があるため、新しいマスターですべてのブランチを再生したくありません。

これを行うスマートでうまくいけば自動的な方法はありますか?

4

1 に答える 1

1

これらのコマンドにより、探している結果が得られます。

git checkout --orphan temp-branch CUT–COMMIT
git commit // This will create your new initial commit
git rev-parse HEAD // To get the SHA of this commit
git replace CUT-COMMIT NEW-COMMIT
git filter-branch -- --all

これがどのように、なぜ機能するかについて質問がある場合は、フィール ツリーにコメントを残してください。このようなことを行う前に、リポジトリをバックアップすることをお勧めします。

filter-branch docuから:

注: このコマンドは、.git/info/grafts および .git/refs/replace/ を尊重します。グラフトまたは置換参照が定義されている場合、このコマンドを実行するとそれらが永続化されます。

于 2013-02-07T13:39:48.543 に答える