推奨されません

推奨されません

複数のコミットを行いました。その後、途中のコミットに戻る必要がありました。そこで変更を加え、新しいブランチを作成しました。今やりたいことは、他のすべてのコミットをスキップ (削除) し、ブランチをマスター バージョンとして使用することです。しかし、その方法がわかりません。

状況の説明は次のとおりです。

commit1 (latest)
commit2
commit3 (head pointing here)
other commits...

の時点でcommit3、変更を加えて、それをプッシュするための新しいブランチを作成しました。

commit2ここで、と を削除して、ブランチバージョンをメインバージョンとして作成したいと思いますcommit1

答え1

プッシュしたので、最も壊れにくいオプションはおそらく次のとおりですgit revert

git checkout master
git revert commit1 commit2
git merge new-branch
git push

これにより、master には new-branch とまったく同じファイルが含まれることになりますが、commit1 と commit2 は master の履歴に残り、さらに 2 つのコミットによって変更が元に戻されることに注意してください。


推奨されません

すでにマスターからプッシュしたコミットを本当に削除したい場合は、まず、おそらく何かを壊すことになるだろうとチームメイト全員に通知してから、以下を使用しますgit reset

git checkout master
git reset --hard commit3
git merge new-branch
git push -f

--hardは、commit1 と commit2 によって行われたすべての変更をファイルシステムから削除します。 を使用して、--softコミットを削除しながら、ファイルシステム内の変更を保持することができます。

チームメイトに以下のドキュメントを案内すると良いでしょう。アップストリームリベースからの回復(git reset は、すでにプッシュされたコミットで使用する場合、そのセクションを指しますreset --hard)。

関連情報