Githubおよびローカルで最後のn個のコミットを削除する方法は?


127

私はGitHubリポジトリの1つから最後の2つのコミットを削除しようとしています。私はここで提案されているように試しましgit push -f origin HEAD^^:master。最後の2つのコミットが削除されているため、動作しているようです。

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

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

私のローカルリポジトリに問題があると思います。Githubリポジトリをローカルに複製してここで変更を加えた場合、新しいコミットをプッシュしても、古いコミットはGitHubにプッシュされません。

何か案が?

回答:


199

ローカルで最後の2つのコミットを削除するには、次を使用することをお勧めします。

git reset --hard HEAD^^

リベースは、ここでは役に立たないまったく異なる操作です。


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

これを最後のn回のコミットに対して一般化できますか?
user_19 14

6
@ user_19 git reset --hard HEAD^4またはのようなことができますgit reset --hard HEAD~4。ただし、履歴にマージが含まれている場合、状況は少し複雑になる可能性があります。リビジョンの指定の詳細については、ここの対応するセクションを参照してください
KL-7

2
最後の7つのコミットを削除したい場合は?? 私はHEAD後7倍^を配置する必要がありますか...私をクリアしてください
GAGAN Gamiさん

4
@GaganGami、私はあなたがそうすると思いますがgit reset --hard HEAD~7、私が間違っている場合は私を修正してください。
Con Antonakos

105

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

git reset --hard HEAD~2

2削除する最後のコミットはいくつでも変更できます。

この変更をリモートにプッシュするには、 git pushforce-f)パラメーターを使用ます。

git push -f

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


行った変更は保持されますか?
Zuhayer Tahir 2017

@SymfonyUser、いいえ。あなたが作ったときにhardコマンドを、あなたが失う、この2つのコミットを。変更を保存するdiff場合は、リセットを適用する前に、これらのコミットのファイルを作成してください。
Dherik 2017

3
@ZuhayerTahirは、最後の5つのコミットのコミット取り消す場合は、実行しますgit reset HEAD~5(使用しないでくださいhard)。このようにして、ステージングされた状態(つまり、コミットされていない状態)で変更を取得します。私にとってはこの答えを参照してください。
Honey

@ハニーご回答ありがとうございます。私も同じ結論に達しました。
Zuhayer Tahir 2017

29

次の作品

git reset HEAD~n

最後のnコミットをHEAD^1つだけ削除するため、ローカルリポジトリから削除します。これらの変更をリモートから削除する必要がある場合は、リモートの背後にいるため、プッシュを強制する必要がある場合があります。

git push -f origin <branch>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.