git - マスターブランチを初期コミットにリセットしますが、以前の履歴は保持します

okwaves2024-01-25  7

過去 9 か月ほどでコードを完全に作り直したため、マスターのリリース ブランチから大幅に変更されました。

リリースがマスターから大幅に分岐しているため、PR をマスターに作成するときに非常に多くの競合が発生します。私は長い間リリース ブランチに取り組んできたので、master の現在の内容は基本的に無関係です。 (追加のコミットを元に戻すことは別として) 同じ履歴を維持しながら、マスターを初期コミット (.gitignore ファイルによるリポジトリの初期化) にリセットしたいと考えています。

マスターから取得したマスターバックアップブランチで次のことを試し、コマンドを実行した後、リリースブランチをこのマスターバックアップブランチに PR しようとしました。

git replace --hard - これにより履歴がリセットされます

git revert <初期コミット ID>^..<最新のコミット ID> - これにも同じ競合があり、すべてのファイルがリリースからマスターに正しくプッシュされません。

他に何をすればいいのかわかりません。私の最終的な目標は、マスターの現在の履歴を維持しながら、マスターのコンテンツをリリースに置き換えることです。これに、コミットを元に戻すことや、もちろんリリースからマスターへのマージも追加します。

ご協力をよろしくお願いいたします。

マスターを何かにリセットする理由はありません。 ACCマージ中にリリースからのすべての変更を取得します。次のようなもの: stackoverflow.com/a/25751748/1265393

– pkamb

2020 年 9 月 4 日 16:39

これは私が起こるはずだと思っていたことですが、変更の一部にはファイルの完全な再構成が含まれています。マスターに PR/マージする場合、古いファイルはまだ存在します。

– user483934

2020 年 9 月 4 日 16:41



------------------------

とてもあなたらしいですねリリースが開始されてからマスターが移動していないと仮定して、マスターから git merge --no-ff release を実行したいと考えています。そうすれば、マスターの直後の 1 つのコミットにリリースのコンテンツが含まれるようになります (および、リリースのすべての開発を含むサイド ブランチも含まれます)。

マスターの後にリリースのすべての変更を含む 1 つのコミットを作成し、リリースがどのようにして現在のようになったかの詳細を破棄したい場合は、次のようにします。

git checkout --detach release
git reset --soft master
git commit -m "All of release in a single commit"
# If you like the result:
git branch -f master
git checkout master

マスターとリリースが分岐しており、マスターとリリースを強制的にマージして、リリースのコンテンツをそのまま保持したい場合は、次のように実行できます。

git commit-tree -p master -p release -m "Merge of release.... keeping release as is" release^{tree}

これにより、出力に ID が書き込まれます。これは作成された新しいリビジョンです。マスターとリリースのマージとなり、内容はリリースと同様になりますが、違いはありません。ですので、お気軽にチェックしてみて、結果が気に入ったら:

# once you have already checked out the new revision
git branch -f master
git checkout master

6

マスターは 3 つのコミットで前進しましたが、これらは手動でリリースするために複製された小さな変更であり、これがひどいものであり、これを PITA にしました。これも問題を引き起こすのではないかと思います。マスターにはいくつかのブランチ ポリシーがあり、PR のみを送信でき、たとえば git bash を介してマスターにマージできないことを意味します。したがって、おそらくマスターのコピーを作成し、そのブランチ上でコマンドを実行する必要があるでしょう。マスターに分岐する en PR。

– user483934

2020 年 9 月 4 日 16:37

わかりました...ちょっとしたハックを追加しましょう

– eftshift0

2020 年 9 月 4 日 16:39

上記のコメントに追加のコンテキストを少し追加しました。私が読んだのではないかと思うので、あなたがそれを読むことができたかどうかはわかりません。十分な速さで編集できない

– user483934

2020 年 9 月 4 日 16:39

全体の文脈は理解できたと思います。ハッキングがどうなるか教えてください。

– eftshift0

2020 年 9 月 4 日 16:43

1

これでうまくいきました。マスターのコピーを取得して git を実行しましたリリースからコピーへのコミットツリー。これで、コピーからマスターに PR を問題なく作成でき、ビルドは成功しました。ご助力ありがとうございます!今日まで文字通り git commit-tree について聞いたことがなかったので、通常のリベース、リセット、リバートを試していました。

– user483934

2020 年 9 月 4 日 17:14

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。