33

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

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

git rebase -i master

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

必要なことを行う最も簡単な方法は何ですか?

4

3 に答える 3

32

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

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

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

于 2009-12-28T14:49:36.770 に答える
18

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

git rebase -i last-good-commit
于 2009-12-28T14:51:02.740 に答える
5

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

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

git revert <sha-of-bad-commit>

そして、私もリモコンを押すことができました

于 2012-12-17T16:55:13.270 に答える