私は「誤って」GitHubにコミットしました。
このコミットを削除することは可能ですか?
私のGitHubリポジトリをこのコミット前の状態に戻したい。
注: 以下のコメントで
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
を実行する必要があります。
git Push -f Origin HEAD^:master
それはプッシュを「元に戻す」べきです。
それがちょうど間違いである場合(おそらくあなたはリポジトリをフォークし、そして新しいものではなくオリジナルにプッシュすることになった)簡単な復帰のためにここにもう一つの可能性があります:
git reset --hard 71c27777543ccfcb0376dcdd8f6777df055ef479
明らかにあなたが戻りたいコミットの番号のためにその番号を交換してください。
あなたがもう一度プッシュするとそれ以降のすべてが削除されます。それをするための次のステップは次のようになります。
git Push --force
元に戻すコミットを見つけるためのgit log
7f6d03のgit Push Origin +7f6d03:master
は、誤ってプッシュされたコミットの前のコミットです。 +
はforce Push
のためのものです
以上です。
ここ はあなたの問題を解決する、とても簡単なガイドです。
この解決策は、削除されるコミットが最後にコミットされたコミットである場合に機能することに注意してください。
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>" .
キャッシュを完全に消去するには、キャッシュをクリアする必要があります。 gitからのこのヘルプページはあなたを助けるでしょう。 (それは私を助けました) http://help.github.com/remove-sensitive-data/ /
プッシュを元に戻すには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からの変更なし)。
1. git reset HEAD^ --hard
2. git Push Origin -f
これは私のために働きます。
リモートリポジトリからコミットを削除するには
git Push -f Origin last_known_good_commit:branch_name
ローカルリポジトリからコミットを削除するには
git reset --hard HEAD~1
最新のコミットを削除し、行った作業を続けます。
git reset --soft HEAD~1
最新のコミットを削除し、行った作業を破棄します。
git reset --hard HEAD~1
復帰したいコミットからあなたのコミットハッシュを知る必要があります。 GitHubのURLから入手できます: https://github.com/your-organization/your-project/commits/master
コミットのハッシュ(元に戻る)が "99fb454"(ロングバージョン "99fb45413eb9ca4b3063e07b40402b136a8cf264")であるとしましょう。
git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264
git Push --force
Githubでブランチの先頭になりたいコミットの参照仕様を見つけて、次のコマンドを使用します。
git Push Origin +[ref]:[branchName]
あなたのケースでは、1つのコミットに戻りたいだけなら、そのコミットのためのrefの始まりを見つけてください。以下をせよ:
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
念のため、しばらくの間ローカルバックアップを保持しておくことをお勧めします。
端末でこのコマンドを実行してください。
git reset HEAD~n
ローカルリポジトリから最後のn個のコミットを削除することができます。 HEAD〜2。 force gitに進んでリポジトリをプッシュしてください。
git Push -f Origin <branch>
お役に立てれば!
分岐とマージの構造を保持することは、リベースを行うときに--preserve-merges
オプションを使用することが重要です。
git rebase --preserve-merges -i HEAD^^
あなたのローカルな変更を最初にサイドのどこかに保存してください(バックアップ)
最近コミットしたものを閲覧し、[Copy the full SHA]ボタンをクリックしてそれをクリップボードに送信することでコミットハッシュを選択できます。
最後のコミットハッシュがであれば、g0834hg304gh3084ghとしましょう(たとえば)
あなたが実行する必要があります:
git Push Origin +g0834hg304gh3084gh:master
以前にコピーしたハッシュを使用して、それを "HEAD"リビジョンにします。
ご希望の地域の変更を追加してください。完了しました。
GitHubの場合
対話型のリベースを削除したい場合は、
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
これは特定のコミットを元に戻します