GitHubでコミットを削除するにはどうすればよいですか?
-
19-08-2019 - |
質問
I <!> quot;偶然<!> quot; GitHubにコミットをプッシュしました。
このコミットを削除することは可能ですか?
このコミット前のGitHubリポジトリを元に戻したい。
解決
注:以下のコメントで
git rebase -i
の代替案をご覧ください<!>#8212;
git reset --soft HEAD^
まず、ローカルリポジトリのコミットを削除します。これを行うには、git rebase -i HEAD~2
を使用します。たとえば、最後のコミットの場合、git push origin +branchName --force
を実行し、ポップアップするエディターウィンドウ内の2行目を削除できます。
次に、git stash
Git Magic第5章:歴史の教訓-そしてその後、いくつかので詳細を確認します(古いコミットを削除する場合など)。
ああ、作業ツリーが汚れている場合は、最初にgit stash apply
を実行し、次に<=>を実行する必要があります。
他のヒント
git push -f origin HEAD^:master
<!> quot; undo <!> quot;プッシュ。
それが単なるミスである場合に簡単に元に戻すには(おそらく、レポをフォークしてから、新しいレポではなく元のレポジトリにプッシュすることになります)、別の可能性があります:
git reset --hard 71c27777543ccfcb0376dcdd8f6777df055ef479
明らかに、戻りたいコミットの数とその数を入れ替えます。
それ以降は、もう一度プッシュするとすべて削除されます。それを行うには、次のステップは次のとおりです。
git push --force
-
git log
元に戻すコミットを見つけるには -
git push origin +7f6d03:master
一方、7f6d03は誤ってプッシュされたコミットの前のコミットです。+
はforce push
用でした
これで終わりです。
こちらはあなたの問題を解決する非常に良いガイドで、簡単で簡単です!
削除後にコミットの変更を保持する場合:
このソリューションは、削除するコミットが最後にコミットされた場合に機能することに注意してください。
1-ログから戻りたいコミット参照をコピーします:
git log
2-gitをコミット参照にリセットします:
git reset <commit_ref>
3-間違ったコミットからのローカルの変更をStash / storeに保存して、後でリモートにプッシュした後に使用します:
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コミットからの変更はありません)。
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でブランチのヘッドにしたいコミットの参照仕様を見つけ、次のコマンドを使用します。
git push origin +[ref]:[branchName]
あなたの場合、1つのコミットに戻りたい場合は、そのコミットのrefの始まりを見つけてください、たとえば7f6d03であり、変更したいブランチの名前、たとえばマスター、および次の操作を実行します。
git push origin +7f6d03:master
プラス文字は--force
として解釈されます。これは、履歴を書き換えているために必要になります。
コミットを<=>するたびに、ブランチをマージする他の人の履歴を書き換えられる可能性があることに注意してください。ただし、問題をすばやく(他の誰かがブランチをマージする前に)キャッチした場合、問題は発生しません。
元に戻すコミットのコミットハッシュを知る必要があります。次のようなGitHub URLから取得できます: https://github.com/your -organization / your-project / commits / master
コミットからのハッシュ(戻りたい場所)が<!> quot; 99fb454 <!> quot;であるとします。 (長いバージョン<!> quot; 99fb45413eb9ca4b3063e07b40402b136a8cf264 <!> quot;)、その後は次の操作を行うだけです:
git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264
git push --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個のコミットを削除できます。頭〜2。 リポジトリで強制的にgit pushを実行します。
git push -f origin <branch>
これがお役に立てば幸いです!
リベースを実行するときに--preserve-merges
オプションを使用するには、分岐およびマージ構造を保持することが重要です。
git rebase --preserve-merges -i HEAD^^
最初にローカルの変更をサイドのどこかに保存します(バックアップ)
最近のコミットを参照し、クリックしてコミットハッシュを選択できます <!> quot;完全なSHA <!> quot;をコピーします。ボタンをクリックしてクリップボードに送信します。
最後のコミットハッシュの場合、たとえばg0834hg304gh3084gh(たとえば)
実行する必要があります:
git push origin +g0834hg304gh3084gh:master
以前にコピーしたハッシュを使用して<!> quot; HEAD <!> quot;にする改訂。
目的のローカル変更を追加します。完了;)
GitHubの場合
- ローカルリポジトリのコミットをリセット(HARD)
- 新しいブランチを作成
- 新しいブランチをプッシュ
- OLDブランチを削除します(マスターブランチを削除する場合は、新しいブランチをデフォルトブランチにします)
削除する場合は、対話型リベースを実行します
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
特定のコミットを元に戻します
履歴を書き直すことはあまり良くありません。 git revert <commit_id>
を使用すると、上記のコミットIDのクリーンなリバースコミットが作成されます。
この方法では、履歴は書き換えられません。代わりに、元に戻されたことを誰もが知っています。
ファイルを追加/削除して、必要な方法で取得します:
git rm classdir
git add sourcedir
次にコミットを修正します:
git commit --amend
以前の誤ったコミットは、新しいインデックスの状態を反映するように編集されます-つまり、最初から間違いを犯したことがないようになります
これは、まだプッシュしていない場合にのみ行う必要があることに注意してください。プッシュした場合は、通常どおり修正をコミットする必要があります。
GitHubデスクトップでは、コミットを右クリックして元に戻すことができます。これにより、新しいコミットが作成されます。変更を元に戻します。
偶発的なコミットは履歴に残りますが(たとえば、誤ってAPIキーまたはパスワードをコミットした場合は問題になる可能性があります)、コードは元に戻ります。
これは最も単純で最も簡単なオプションであり、受け入れられる答えはより包括的なものです。