回答:
git reset --hard HEAD~1
git push -f <remote> <branch>
(実施例プッシュ: git push -f origin bugfix/bug123
)
これにより、最後のコミットが取り消され、更新された履歴がリモートにプッシュされます。-f
リモートのアップストリーム履歴を置き換えるため、これを渡す必要があります。
git log --decorate --oneline
HEADが指す場所を見つけるために使用します。
git reset HEAD~1
変更を削除したくない場合(ステージングされていない変更)。変更、コミット、および再度プッシュするgit push -f [origin] [branch]
一般的には、次のようにして「逆」コミットを行います。
git revert 364705c
次に、通常どおりリモートに送信します。
git push
これはコミットを削除しません。最初のコミットが行ったことを元に戻す追加のコミットを作成します。特に変更がすでに伝達されている場合は特に、安全ではない何か。
git reset
変更をサーバーにまだプッシュしていない場合にのみ受け入れられます。
まず、リラックス。
「私たちの支配下にあるものはありません。私たちの支配は単なる幻想です。」、「誤りを犯すことは人間です」
意図せずにコードをにプッシュしたようですremote-master
。これで大丈夫です。
1.最初に、SHA-1
返そうとしているコミットの値を取得します(例:マスターブランチへのコミット)。これを実行してください:
git log
各コミットとともに、一連の「f650a9e398ad9ca606b25513bd4af9fe ...」のような文字列が表示されます。戻したいコミットからその番号をコピーします。
2.次に、以下のコマンドを入力します。
git reset --hard your_that_copied_string_but_without_quote_mark
「HEAD is now at」のようなメッセージが表示されるはずです。あなたは晴れています。それが行ったことは、その変更をローカルに反映することです。
3.次に、以下のコマンドを入力します。
git push -f
あなたは次のように見えるはずです
"警告:push.defaultは設定されていません。その暗黙の値が変更されています。......合計0(デルタ0)、再利用0(デルタ0)... ... your_branch_name->マスター(強制更新) 」
今、あなたはすべて明確です。もう一度「git log」でマスターを確認してください。fixed_destination_commitがリストの一番上にあるはずです。
あなたは大歓迎です(事前に;))
更新:
これで、これらすべてが始まる前に行った変更はなくなりました。 これらのハードワークを再び取り戻したい場合は、それが可能です。git reflogとgit cherry-pickコマンドに感謝します。
インタラクティブなリベースを行うことができます:
git rebase -i <commit>
これにより、デフォルトのエディターが表示されます。削除するコミットを含む行を削除して、そのコミットを削除します。
もちろん、この変更をリモートリポジトリに適用するには、リモートリポジトリにアクセスする必要があります。
この質問を参照してください:Git:リポジトリから選択したコミットを削除する
git reset --hard <the-sha-you-want-to-return-to>
。