0

git merge --squash は、別のフィーチャー ブランチをメイン ブランチにマージするために行ったものですが、後でフィーチャー ブランチの一部であった重要な履歴を失ったことに気付きました。

マージ コミットに加えてメイン ブランチに多くのコミットがあった場合、フィーチャー ブランチからメイン ブランチに履歴を戻すにはどうすればよいですか?

フィーチャー ブランチをメイン ブランチに再度マージすると、問題は解決しますか?

4

2 に答える 2

0

機能ブランチでマージする場合、スカッシュ マージと機能ブランチで同様の変更があるため、これはおそらくばかげているように見えますが、履歴はそこにあります。

機能ブランチで編集されたのと同じ場所で何かを変更した場合は、ほとんどの場合、マージの競合を解決する必要があります。

于 2013-10-10T13:48:31.870 に答える
0

メイン ブランチから除外したコミットがわかっている場合は、cherry-pickそれらを 1 つずつ (git cherry-pick <COMMIT-SHA>それぞれ)、またはrebase --interactive.

フィーチャー ブランチをチェックアウトしたら、実行します(これがメイン ブランチであるとgit rebase --interactive master仮定します)。masterメインブランチ$EDITORにない機能ブランチのコミットのリストがポップアップ表示され、それぞれにpick定数と短い SHA ハッシュが付加されます。すでに押しつぶされていることがわかっているコミットの行を削除してmasterそのファイルを保存すると、gitそれらをバッチで選択することになります。もちろん、競合が発生した場合は解決する必要がありますが、大きな競合 (たとえば、コミットの 80% に競合がある) があると、以前にマージしたコミットを適用していることを示す警告になる可能性があります。

于 2013-10-10T15:52:01.827 に答える