master と gh-pages の 2 つのブランチを含むプロジェクトがあります。これらは基本的に 2 つの異なるプロジェクトであり、gh-pages プロジェクトはマスター プロジェクトに依存します (その逆はありません)。「master にはソース コードが含まれ、gh-pages にはそれらのソース ファイルからビルドされたバイナリが含まれる」と考えてください。定期的に、マスターに蓄積された変更を取得し、「マスター コミット xxxxxxxx と一致させる」というコミット メッセージを使用して、gh-pages ブランチに新しいコミットを行います。
これをしばらく行った後、gh-pages コミットの「マスター コミット xxxxxxxx と一致させる」が実際に git リポジトリの親として xxxxxxxx を持っていればいいことに気付きました。このように (悪い MSPaint アート):
リポジトリを上の 2 番目の画像のようにする方法はありますか? 新しいコミットを次のパターンにする方法を知っています: "git merge -s ours master" (そうでなければ空のコミットの親を設定します) の後に "git commit --amend adv550.z8" (ここで adv550.z8は、実際に変更されているバイナリ ファイルです)。しかし、git を使用すると、時間をさかのぼって古いコミットに新しい親を簡単に追加できますか?
ローカルリポジトリが正しく表示されたら、「git push -f」を実行して、Github リポジトリの現在の履歴を吹き飛ばしても構わないと思っています。問題は、ローカル リポジトリを正しく表示できるかどうかです。
数年後に追加して編集:最終的に、git 履歴をそのように見せる試みを断念しましgh-pages
た。私は、利益をゼロにするのは大変な作業だと判断しました。私の新しい習慣は、コミットを積極的に squash することgh-pages
です。私の場合、これらのコミット メッセージを保存することは実際には問題にならないからです。(これは「マスターコミットに合わせて...」という長い行であり、歴史的に興味深いものはありません。)ただし、これをもう一度行う必要がある場合は、次のような回答を聞きます。
git merge $intended_parent_1 $intended_parent_2
git checkout $original_commit -- .
git commit --amend -a -C $original_commit