2011-10-28 18 views
8

私は何か間違ったことを約束しました。 2つのコミットを元に戻し、良いものだけをコミットする方法はありますか?2つのコミットを元に戻し、良いものだけをコミットする方法はありますか?

+0

いいものは何ですか?あなたの歴史はどのように現れ、どのように見せたいのですか? – svick

+0

正解(良いものは?)を取得するともう少し詳細が役立ちます – ryanzec

+0

他のすべてをコミットする前にすべての悪いものを削除してください。 –

答えて

11

git rebase -i HEAD~2を実行してから、そのインターフェイスを使用して以来存在する「不正なコミット」を破棄し、履歴をクリーンアップすることができます。これはプロジェクトの履歴を変更します。変更を既にプッシュしている場合は、取り組むべき社会的課題があります。

他のオプションは、git revertに変更されています。そして2つの新しいコミットが履歴に追加され、プロジェクト履歴に明示的に2つのコミットを明示しないようにします。清潔ではありませんが、扱いが簡単です。

+0

私の同僚は、悪いコミットが始まったと不満を持ちます。ブランチをマージしようとする前にそれを取り除く方がよいでしょう。 'git rebase -i'の答えを提供してくれてありがとう。ちょうど"あなたは本当にやりたいとは思わない! "多くの人のように! –

+0

もう一つの有用なコマンドは、あなたがすでに悪いコミットを押した場合に備えて、 'git push --force'です。 –

+0

'--force'オプションは破壊的です。他の誰かがあなたのコミットを変更してリポジトリにプッシュした場合、強制的にプッシュするとそれらのすべてが破壊されます。 –

10

まず、git reset HEAD~2最初のコミットを破棄し、作業ツリーはそのままの状態にします。 次に、任意の値で新しいコミットを作成します(たとえば、git adds、次にgit commit)。

よく混乱するgit resetのcomamndの詳細については、Scott ChaconのReset Demystifiedを参照してください。

+1

私はコミットがローカルである場合にのみこれを行います。最後の2つのコミットで復帰を使用します – ryanzec

+0

はい、私はOPが間違ったコミットをどこにもプッシュしていないと仮定していました。 –

関連する問題