「誤って」コミットを GitHub にプッシュしてしまいました。
このコミットを削除することは可能ですか?
このコミット前の GitHub リポジトリを元に戻したいです。
「誤って」コミットを GitHub にプッシュしてしまいました。
このコミットを削除することは可能ですか?
このコミット前の GitHub リポジトリを元に戻したいです。
注:以下のコメントで代替案を参照してください
git rebase -i
—</p>
git reset --soft HEAD^
まず、ローカル リポジトリのコミットを削除します。を使用してこれを行うことができますgit rebase -i
。たとえば、これが最後のコミットである場合はgit rebase -i HEAD~2
、ポップアップするエディター ウィンドウ内の 2 行目を実行して削除できます。
次に、を使用して GitHub に強制的にプッシュします。git push origin +branchName --force
詳細については、Git Magic Chapter 5: Lessons of History - And Then Someを参照してください (つまり、古いコミットを削除したい場合)。
ああ、作業ツリーが汚れている場合は、git stash
最初に実行してから後で実行する必要がありますgit stash apply
。
git push -f origin HEAD^:master
それはプッシュを「元に戻す」必要があります。
それが単なる間違いである場合に簡単に元に戻すには (おそらく、リポジトリをフォークしてから、新しいリポジトリではなく元のリポジトリにプッシュすることになった可能性があります)、別の可能性があります。
git reset --hard 71c27777543ccfcb0376dcdd8f6777df055ef479
明らかに、その番号を、戻りたいコミットの番号に置き換えます。
もう一度押すと、それ以降のすべてが削除されます。そのためには、次のステップは次のようになります。
git push --force
git log
元に戻したいコミットを見つける
git push origin +7f6d03:master
7f6d03 は、誤ってプッシュされたコミットの前のコミットです。
+
だったforce push
以上です。
これは、あなたの問題を簡単かつシンプルに解決する非常に優れたガイドです!
キャッシュを完全に消去するには、キャッシュをクリアする必要があります。git のこのヘルプ ページが役に立ちます。(それは私を助けました) http://help.github.com/remove-sensitive-data/
1. git reset HEAD^ --hard
2. git push origin -f
これは私にとってはうまくいきます。
元に戻したいコミットのコミット ハッシュを知る必要があります。https://github.com/your-organization/your-project/commits/masterのような GitHub URL から取得できます。
コミットからのハッシュ(戻りたい場所)が「99fb454」(長いバージョン「99fb45413eb9ca4b3063e07b40402b136a8cf264」)であるとしましょう。
git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264
git push --force
Github でブランチのヘッドにするコミットの ref 仕様を見つけ、次のコマンドを使用します。
git push origin +[ref]:[branchName]
あなたの場合、1 つのコミットだけに戻りたい場合は、そのコミットの参照の先頭を見つけます。たとえば、それは 7f6d03 であり、変更したいブランチの名前は、たとえば master であるとします。以下をせよ:
git push origin +7f6d03:master
プラス記号は として解釈され--force
ます。これは、履歴を書き換えるために必要になります。
--force
コミットするたびに、ブランチをマージした他の人の履歴を書き換える可能性があることに注意してください。ただし、(他の誰かがあなたのブランチをマージする前に) 問題をすばやく見つければ、問題は発生しません。
コミットに機密データがあるためにこれを行っている場合、ここで他の回答を使用することは安全ではありません(詳細を説明する 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
念のため、ローカル バックアップをしばらく保持しておくことをお勧めします。
最初にローカルの変更を横のどこかに保存します(バックアップ)
最近のコミットを参照し、[完全な SHA をコピー] ボタンをクリックしてコミット ハッシュを選択し、クリップボードに送信できます。
最後のコミット ハッシュが g0834hg304gh3084gh の場合 (例)
実行する必要があります:
git push origin +g0834hg304gh3084gh:master
以前にコピーしたハッシュを使用して、「HEAD」リビジョンにします。
必要なローカル変更を追加します。終わり ;)
歴史を書き直すのはあまり良くありません。を使用git revert <commit_id>
すると、上記のコミット ID のクリーンなリバースコミットが作成されます。
この方法では、履歴が書き直されることはなく、元に戻されたことを誰もが知ることができます。