必須の警告: 既にリモート リポジトリにプッシュされている履歴を変更することは、リポジトリを使用している他のユーザーにとって大きな頭痛の種になる可能性があります。
インタラクティブなリベースでそこにたどり着きます。
# start an interactive rebase onto the parent (~) of 'begin'
git rebase -i c7453d9~
インタラクティブなリベースにより、次のようなエディターが表示されます。
pick c7453d9 begin
pick 0a06037 test
pick d825b48 test2
pick c2ba4f3 version 0.1
すべてのコミットからのすべての変更を保持したいが、それらを 1 つの commit のように見せたい場合は、次のように変更します。
reword c7453d9 begin
fixup 0a06037 test
fixup d825b48 test2
fixup c2ba4f3 version 0.1
reword
コミット メッセージを変更する (「バージョン 0.1」に変更する) ように求めるプロンプトが表示fixup
され、コミットからすべてのコンテンツが前のコミットに取り込まれます。最終結果は、4 つすべてのコンテンツを含む単一のコミットになります。
同じことを達成する別の方法:
pick c7453d9 begin
fixup 0a06037 test
fixup d825b48 test2
squash c2ba4f3 version 0.1
squash
コミットの内容を前のコミットにプルしますが、コミット メッセージを変更できます (この場合は「バージョン 0.1」に)。
最初の 3 つのコミットからの変更を完全に破棄し、最後の からの変更のみを保持する場合は、リベース行を次のように変更します。
pick c2ba4f3 version 0.1
基本的に、最初の 3 行を削除します。最終的な結果は、以前のコミットの内容を含まない「バージョン 0.1」のコミットになります。
履歴を変更したら、リモートへのプッシュを強制する必要があります--force
。