これを達成するためにリベース/リバートを使用する方法を理解するのに苦労しています。
私はmaster
ブランチで作業していましたが、特定のコミットの後、ソフトウェアが機能しなくなりました。その時点で行われた変更を失いたくなかったので、マイルストーンに到達するように時間どおりにプレッシャーをかけられたので、git checkout
でいくつかのコミットに戻り、working
という新しいブランチを作成してプッシュを開始しましたそこに私のすべての変更。後で、これらの変更(master
ブランチで行われた)は必要ないことに気付きました。ここで、マスターブランチに戻り、working
ブランチの作成に使用したコミット後にすべてのコミットを削除してから、working
ブランチをmaster
ブランチにマージします。
オンラインフォトエディタで画像を作成して、自分がやろうとしていることを説明しようとしています。私はそれが役立つことを願っています:
5cb967f以降はすべて保持したい。 5cb967fとa0c1de2の間のすべてを取り除きます(それらを含まない)
2つのオプションがあります。
書き換え履歴(破壊的)
git-rebase
を使用して履歴を書き換え、これらのコミットを省略できます。インタラクティブなリベースを実行できます。あなたの説明から、あなたがmaster
とworking
に何を持っているかは正確にはわかりませんが、すべての履歴(必要なものと不要なもの)がそこにあると思います。
git checkout master
git rebase -i a0c1de2
この時点で、$EDITOR
がポップアップし、a0c1de2
からmaster
のHEAD)へのコミットのリストが表示されます。対応する行を削除できます。 c460070..a3cb10e
に移動して、履歴から削除します。
あなたの履歴はローカルで書き直されます。この変更をプッシュしようとすると、早送りではない更新になります。
元に戻し、履歴を保持(非破壊)
履歴を保持したい場合は、コミットのシーケンスを元に戻すことができます。
git checkout master
git revert c460070..a3cb10e
これにより、7つの新しいコミットが作成され、それぞれがこれらの不要なコミットの変更を順番に元に戻します。
歴史のグラフィックについての何かが厄介です。その中のテキストマークアップで行くと、あなたが欲しいのは単に
$ git branch -f master working
マスター上に保持したいポストworking
-ベースコミットがなかったためです。