web-dev-qa-db-ja.com

GITは最新ではないコミットを元に戻し、それ以降のすべてのコミットをリベースします

以前、私はいくつかのコードをコミットしましたが、当時はそれは良い考えのように思えましたが、実際には事態はさらに悪化しました。それは役に立たないので、履歴から変更を削除し、すべてのコミットをリベースしたいと思います-それらはすべて問題なくマージする必要があります。

不正なコミット(gitxを使用)の直前に新しいブランチ(newMasterと呼ばれる)を作成し、チェックアウトして実行してみました。

git rebase -i master

どのAFAICSが私にマスターのコミットのリストとそれらをマージするかマージしないかのオプションを与えたはずですが、代わりに何も言わず、newMasterをマスターと等しくなるように早送りしました。

私が必要とする最も簡単な方法は何ですか?

23
rjmunro

git rebase -iは正しいコマンドですが、最新の変更をブランチから実行し、リベース操作の「ベース」であるリビジョン(不良コミットの直前のリビジョン)を渡します。したがって、ブランチを作成した場合はlast-good-commitは、最後の適切なコミットを指します。masterで次のコマンドを実行することをお勧めします。

git rebase -i last-good-commit
13
Brian Campbell

あなたが望むことをする最も簡単な方法は、編集したいブランチにとどまる(または再チェックアウトする)ことで、このようなものを実行することです。

git rebase --onto <sha1-of-bad-commit>^ <sha1-of-bad-commit>

これにより、不良コミット以降のすべてが不良コミットの親にリベースされ、現在のブランチの履歴から不良コミットが効果的に削除されます。もちろん、競合が発生した場合は解決する必要があります。

29
CB Bailey

rebaseを使用して、変更をリモートにプッシュすることができず、リベースはプルするたびにキャンセルされました。

私は、(最後のコミットではなく)正確なコミットを元に戻すことに成功しました:

git revert <sha-of-bad-commit>

そして、私はリモコンでプッシュすることもできました

2
danza