web-dev-qa-db-ja.com

GitHubのコミットを削除するにはどうすればいいですか?

私は「誤って」GitHubにコミットしました。

このコミットを削除することは可能ですか?

私のGitHubリポジトリをこのコミット前の状態に戻したい。

1547
hectorsq

注: 以下のコメントでgit rebase -iの代わりを参照してください -

git reset --soft HEAD^

まず、あなたのローカルリポジトリからコミットを削除します。 git rebase -iを使ってこれを行うことができます。たとえば、最後のコミットであれば、git rebase -i HEAD~2を実行して、ポップアップしたエディタウィンドウ内の2行目を削除できます。

次に、git Push Origin +branchName --forceを使用してプッシュをGitHubに強制します。

詳しくは Git Magic Chapter 5:歴史の教訓 - そしてその後 を参照してください(つまり古いコミットを削除したい場合)。

作業ツリーが汚れている場合は、最初にgit stashを実行し、次にgit stash applyを実行する必要があります。

1102
Can Berk Güder
git Push -f Origin HEAD^:master

それはプッシュを「元に戻す」べきです。

899
Dustin

それがちょうど間違いである場合(おそらくあなたはリポジトリをフォークし、そして新しいものではなくオリジナルにプッシュすることになった)簡単な復帰のためにここにもう一つの可能​​性があります:

git reset --hard 71c27777543ccfcb0376dcdd8f6777df055ef479

明らかにあなたが戻りたいコミットの番号のためにその番号を交換してください。

あなたがもう一度プッシュするとそれ以降のすべてが削除されます。それをするための次のステップは次のようになります。

git Push --force
318
CodeWalrus
  1. 元に戻すコミットを見つけるためのgit log

  2. 7f6d03のgit Push Origin +7f6d03:masterは、誤ってプッシュされたコミットの前のコミットです。 +force Pushのためのものです

以上です。

ここ はあなたの問題を解決する、とても簡単なガイドです。

85
kate

削除後もコミットの変更を残したい場合は /

この解決策は、削除されるコミットが最後にコミットされたコミットである場合に機能することに注意してください。


1 - ログから戻りたいコミット参照をコピーします。

git log

2 - gitをコミット参照にリセットします。

 git reset <commit_ref>

3 - リモートにプッシュした後に使用するために、間違ったコミットからローカルの変更を隠し格納します。

 git stash

4 - 変更をリモートリポジトリにプッシュします(-fまたは--force)。

git Push -f

5 - 保存した変更をローカルリポジトリに戻す:

git stash apply

7 - あなたが変更に未追跡の/新しいファイルがある場合は、コミットする前にそれらをgitに追加する必要があります:

git add .

6 - 必要な変更を加えてから、必要なファイルをコミットします(または、各ファイル名の代わりにドット '。'を使用して、ローカルリポジトリ内のすべてのファイルをコミットします。

git commit -m "<new_commit_message>" <file1> <file2> ...

または

git commit -m "<new_commit_message>" .
45
Loukan ElKadi

キャッシュを完全に消去するには、キャッシュをクリアする必要があります。 gitからのこのヘルプページはあなたを助けるでしょう。 (それは私を助けました) http://help.github.com/remove-sensitive-data/ /

35
subutux

プッシュを元に戻すにはgit revertを使用します。

git-revert - 既存のコミットを元に戻す

git revert [--edit | --no-edit] [-n] [-m parent-number] [-s] <commit>...
git revert --continue
git revert --quit
git revert --abort

関連パッチが導入した変更を元に戻し、それらを記録するいくつかの新しいコミットを記録します。これはあなたの作業ツリーがきれいであることを必要とします(HEAD commitからの変更なし)。

26
Jyoti Prakash
1. git reset HEAD^ --hard
2. git Push Origin -f

これは私のために働きます。

21
Hilen

リモートリポジトリからコミットを削除するには

 git Push -f Origin last_known_good_commit:branch_name

ローカルリポジトリからコミットを削除するには

git reset --hard HEAD~1

リンク

16
george mano

最新のコミットを削除し、行った作業を続けます。

git reset --soft HEAD~1

最新のコミットを削除し、行った作業を破棄します。

git reset --hard HEAD~1
11
Ekambaram E

復帰したいコミットからあなたのコミットハッシュを知る必要があります。 GitHubのURLから入手できます: https://github.com/your-organization/your-project/commits/master

コミットのハッシュ(元に戻る)が "99fb454"(ロングバージョン "99fb45413eb9ca4b3063e07b40402b136a8cf264")であるとしましょう。

git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264
git Push --force
9

Githubでブランチの先頭になりたいコミットの参照仕様を見つけて、次のコマンドを使用します。

git Push Origin +[ref]:[branchName]

あなたのケースでは、1つのコミットに戻りたいだけなら、そのコミットのためのrefの始まりを見つけてください。以下をせよ:

git Push Origin +7f6d03:master

プラス文字は--forceとして解釈されます。これは履歴を書き換えるために必要になります。

--forceをコミットしたときはいつでも、ブランチをマージしている他の人々の歴史を書き換える可能性があることに注意してください。しかし、他の誰かがあなたのブランチをマージする前にあなたがその問題を素早く捉えれば、あなたは問題を抱えることはないでしょう。

9
orb

機密データがコミットされているためにこれを行っている場合は、ここで他の回答を使用するのは安全ではありません (subutuxを除く、これについては後で説明します)。

これに関する githubガイド 外部ツールの使用を推奨しますが、私は組み込みのものを使用することを好みます。

まず、 リポジトリのバックアップを作成します 。その後:

git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' \
--Prune-empty --tag-name-filter cat -- --all

その後、 リポジトリがあなたが望む状態になっていることを確認してください 。あなたはバックアップに対して差分を取ることをお勧めします。

それが正しいと確信しているならば:

#get rid of old unreferenced commits (including the data you want to remove)
git gc --Prune=now
git Push Origin --force --all

念のため、しばらくの間ローカルバックアップを保持しておくことをお勧めします。

6
goncalopp

端末でこのコマンドを実行してください。

git reset HEAD~n

ローカルリポジトリから最後のn個のコミットを削除することができます。 HEAD〜2。 force gitに進んでリポジトリをプッシュしてください。

git Push -f Origin <branch>

お役に立てれば!

5
Kent Aguilar

分岐とマージの構造を保持することは、リベースを行うときに--preserve-mergesオプションを使用することが重要です。

git rebase --preserve-merges -i HEAD^^
3
Carlos Mafla

あなたのローカルな変更を最初にサイドのどこかに保存してください(バックアップ)

最近コミットしたものを閲覧し、[Copy the full SHA]ボタンをクリックしてそれをクリップボードに送信することでコミットハッシュを選択できます。

最後のコミットハッシュがであれば、g0834hg304gh3084ghとしましょう(たとえば)

あなたが実行する必要があります:

git Push Origin +g0834hg304gh3084gh:master

以前にコピーしたハッシュを使用して、それを "HEAD"リビジョンにします。

ご希望の地域の変更を追加してください。完了しました。

GitHubの場合

  • ローカルリポジトリのコミット(HARD)をリセットする
  • 新しいブランチを作る
  • 新しいプッシュ
  • OLDブランチを削除する(マスターブランチを削除する場合は、新しいブランチをデフォルトのブランチとして作成します)
1
M_R_K

対話型のリベースを削除したい場合は、

git rebase -i HEAD~4

4 represents total number of commits to display count your commit andそれに応じて変更

リストから必要なコミットを削除してください...

Ctrl + X(ubuntu) または :wq(centos) で変更を保存する

2番目の方法、元に戻す、

git revert 29f4a2 #your commit ID

これは特定のコミットを元に戻します

0