git merge --squash は、別のフィーチャー ブランチをメイン ブランチにマージするために行ったものですが、後でフィーチャー ブランチの一部であった重要な履歴を失ったことに気付きました。
マージ コミットに加えてメイン ブランチに多くのコミットがあった場合、フィーチャー ブランチからメイン ブランチに履歴を戻すにはどうすればよいですか?
フィーチャー ブランチをメイン ブランチに再度マージすると、問題は解決しますか?
機能ブランチでマージする場合、スカッシュ マージと機能ブランチで同様の変更があるため、これはおそらくばかげているように見えますが、履歴はそこにあります。
機能ブランチで編集されたのと同じ場所で何かを変更した場合は、ほとんどの場合、マージの競合を解決する必要があります。
メイン ブランチから除外したコミットがわかっている場合は、cherry-pick
それらを 1 つずつ (git cherry-pick <COMMIT-SHA>
それぞれ)、またはrebase --interactive
.
フィーチャー ブランチをチェックアウトしたら、実行します(これがメイン ブランチであるとgit rebase --interactive master
仮定します)。master
メインブランチ$EDITOR
にない機能ブランチのコミットのリストがポップアップ表示され、それぞれにpick
定数と短い SHA ハッシュが付加されます。すでに押しつぶされていることがわかっているコミットの行を削除してmaster
そのファイルを保存すると、git
それらをバッチで選択することになります。もちろん、競合が発生した場合は解決する必要がありますが、大きな競合 (たとえば、コミットの 80% に競合がある) があると、以前にマージしたコミットを適用していることを示す警告になる可能性があります。