2012-01-13 27 views
0

私のものが既にプッシュされ、展開された後、前のコミットに戻す必要があります。GIT ...元に戻す

私はそれをチェックアウトするためにGitのチェックアウトのHEAD^

を使用していたが、今それをプッシュしますか?それは枝がuptodateだと言う!

すべてのヘルプは大歓迎です!「」」

+1

可能な複製を実行し、このコマンド

git cat-file -p HEAD 

によって見ることができます[GITは前回のコミットに戻る...方法?](http:// stackoverflow。com/questions/4114095/git-revert-to-previous-commit-how) –

+0

重複した質問に対する私の答えはあなたを助けます。その後、プッシュする必要があります。履歴を変更することを選択した場合(例えば 'git reset -hard HEAD ^'で履歴からコミットを取り除く場合)、 'git push -f'を使う必要があります。パブリック・レポから引っ張られた他の誰とも混乱します。 – Cascabel

答えて

3

2つのオプションがあります。 git revert HEADで間違ったコミットを元に戻すことができます。これにより、前のコミットを元に戻す新しいコミットが生成されます。他のコミットと同じようにプッシュできます。

コミットが存在しないことを履歴に表示する場合は、git reset --hard HEAD^でコミットを削除できます。 (作業ディレクトリに加えた変更はすべて破棄されますので、-fフラグを押して強制的にリモートリポジトリからコミットを取り除くことができますので注意してください。あなたをコミット削除します。さらに重要なのは、あなたがコミットするので、誰もが何かをプッシュしている場合、それらのコミットが失われます。あなたは他の誰がレポにアクセスしたかどうかわからない場合は、最初のオプションを最も安全である。

EDIT

Jefromiが言及しているように、上記のどちらかを実行する前に作業していたブランチをチェックしたい場合、または別の問題が発生する可能性があります。

+2

'git checkout HEAD ^'の実行後、チェックアウトされていないブランチがないので、OPは復帰またはリセットする前に 'git checkout 'する必要があることに注意してください。 – Cascabel

+0

この回答とコメントは最も正しいです。一度中央のリポジトリにプッシュすると、履歴の編集はお勧めできません。正しいことは変更を元に戻し、元に戻した変更をプッシュすることです。つまり、時間通りに戻ってはいけません。進む(将来に戻る)。 –

+0

@Jefromi良い点。それを加えていただきありがとうございます –

0

をあなたが最初の変更をコミットする必要があります。

また、あなただけの単一のコミットを戻したい場合、あなたはgit revert <commit>代わりのgit checkoutを使用することができます。


あなただけgit checkout HEAD^をした場合は、とにかくコミットすることは何もないだろうが、あなたは「デタッチブランチ」になりますあなたがgit checkout HEAD^ -- .のような何かをしたなら、あなたが上演CHをコミットする必要があります。押し込む前に怒り。

+0

OPが 'git checkout HEAD ^'を使用した場合、コミットするものはありません。 –

+0

@MichaelMior:True。 OPは 'git checkout HEAD^- .'のようなものだったと思っていましたが、おそらくそうではありません。 – mipadi

+0

ええ、確かにコミットするものはないと言います。 – alemur

2
git checkout 

古いバージョンをチェックアウトするだけです。それは本当に何も変わらない。 コミットを元に戻すには、反対の変更をコミットする必要があります。うまくいけば、この

git revert *commit-id* 

ためspeciallコマンドは、だから、最後はタイプ

git revert HEAD 

をコミットしかし、あなたがそのようにコミットマージ戻すことはできません戻すことがあります。これを行うには、元に戻す親を指定する必要があります。親のリストは、(第一又は第二の)コミット所望の数を決定し、次いで

git revert -m 1 HEAD 

又は

git revert -m 2 HEAD 
+0

私はこの致命的なようなエラーを続けています:コミットd967dab95cebf3284c0e86453353eeec5260b687はマージですが、-mオプションは指定されていません。 – alemur

+0

@Alex私は私の答えを編集しました。 –

+0

ありがとう!私はこれを投稿したとき、昨日パニックになっていました。今、クールな気持ちで、私の問題の解決策は、クールなままにして、git checkoutを自分のページの作業バージョンにして、私のマスターをチェックアウトし、変更を適用してください。はい? – alemur