2012-04-14 17 views
59

自分のGitHubリポジトリの最後の2つのコミットを削除しようとしています。私は、hereとして提案しました:git push -f origin HEAD ^^:master。それは動作するように思われ、最後の2つのコミットが削除されます。Githubとローカルの最後のnコミットを削除するには?

次に、git rebase -i HEAD〜2を使用してローカルリポジトリから削除しました。これらのコミットに関連する行を削除し、正しく削除されていることをgit logで確認します。

その後、ローカルリポジトリにいくつかの変更を加え、新しいコミットを作成してGitHubにプッシュします。問題は私のGitHubアカウントで私が削除しようとした前の2つのコミットがあることです。

ローカルリポジトリに問題があると思うのですが、自分のGithubリポジトリを自分のローカルにクローンして、新しいコミットをプッシュするときにここでいくつかの変更を加えると、それらの古いコミットはGitHubにプッシュされません。

最後の二つのコミットを削除するには

答えて

112

ローカルに私が使用してお勧め:

git reset --hard HEAD^^ 

リベースは、ここであなたを助けにはなりません完全に異なる操作です。 HEAD^として私

git reset HEAD~n 

それは地元のレポから最後nコミットを取り除くための

+14

この変更を既にリモートリポジトリにプッシュしている場合。 git push -fで削除することができます-f –

+0

最後のn回のコミットでこれを一般化できますか? –

+3

@ user_19 'git reset --hard HEAD^4'や' git reset -hard HEAD〜4'のようなことができます。あなたの履歴にマージが含まれていると、状況が少し複雑になることがあります。リビジョンの指定に関する詳細は、対応するセクション[here](https://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.html)を参照してください。 –

12

次の作品は、一つだけ削除されます。リモートからこれらの変更を削除する必要がある場合は、リモートの後ろにいるように強制的にプッシュする必要があります。

git push -f origin <branch> 
22

あなたは2(2に)最後のコミットを削除したい場合は、それを行うための簡単なコマンドがあります:

git reset --hard HEAD~2 

あなたは、あなたがしたい最後のコミットの任意の数の2を変更することができます除去する。

とリモートにこの変更をプッシュする、あなたは-f)パラメータでgit pushを実行する必要があります。

git push -f 

しかし、は、私はすべてのgitコマンドを実行するためにをお勧めしません。 -fまたは--hardリモートからの新しいコミット(Github)が削除された後にコミットされると、オプションが関係します。その場合は、常にgit revertを使用してください。

+0

私が滞在した変更はありますか? –

+0

@SymfonyUser、no。 'hard'コマンドを実行すると、この2つのコミットが失われます。変更を保存する場合は、リセットを適用する前に、これらのコミットの 'diff'ファイルを作成してください。 – Dherik

+1

@ZuhayerTahir最後の5つのコミットのコミットを元に戻したい場合は 'git reset HEAD〜5'(' hard'を使わないでください)を実行してください。このようにして、ステージングされた状態(コミットされていない状態)で変更を取得します。私にとっては[この回答](https://stackoverflow.com/a/927386/5175709)を参照してください。 – Honey

関連する問題