git commit
に続いてgit Push
を実行しました。ローカルリポジトリとリモートリポジトリの両方でその変更を元に戻すにはどうすればよいですか?
$ git log
commit 364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8
Author: Michael Silver <Michael [email protected]>
Date: Tue Jun 11 12:24:23 2011 -0700
git reset --hard HEAD~1
git Push -f <remote> <branch>
(プッシュの例:git Push -f Origin bugfix/bug123
)
これにより、最後のコミットが取り消され、更新された履歴がリモートにプッシュされます。リモートのアップストリーム履歴を置き換えるため、-f
を渡す必要があります。
通常、以下を使用して「逆」コミットを行います。
git revert 364705c
その後、通常どおりリモートに送信します。
git Push
これはコミットを削除しません。最初のコミットが実行したものをすべて取り消す追加のコミットを作成します。特に変更がすでに伝播されている場合は特に、安全ではないその他のもの。
まず、リラックスしてください。
「私たちの制御下にあるものは何もありません。私たちの制御は単なる幻想です。」、「エラーは人間です」
意図せずにコードをremote-master
にプッシュしたことがわかります。これは大丈夫です。
1。最初に、返そうとしているコミットのSHA-1
値を取得します。 masterブランチにコミットします。これを実行します:
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-> master(強制更新) 」
今、あなたはすべて明確です。もう一度「git log」でマスターを確認してください。fixed_destination_commitがリストの一番上にあるはずです。
どういたしまして(事前に;))
更新:
これで、これらすべてが始まる前に行った変更はなくなりました。これらのハードワークを再び取り戻したい場合は、可能です。 git reflog、およびgit cherry-pickコマンドのおかげです。
git reset HEAD~1
変更を削除したくない場合(ステージングされていない変更)。変更、コミット、もう一度プッシュgit Push -f [Origin] [branch]
インタラクティブなリベースを行うことができます:
git rebase -i <commit>
これにより、デフォルトのエディターが表示されます。削除したいコミットを含む行を削除して、そのコミットを削除します。
もちろん、この変更をリモートリポジトリに適用するには、リモートリポジトリにアクセスする必要があります。
この質問を参照してください: Git:選択したコミットをリポジトリから削除する
代わりに:
git Push Origin +364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8^:master
Originリモートリポジトリのマスターブランチを最後のコミットの親に強制します
使用してみてください
git reset --hard <commit id>
注:ここで、commit idはリセットしたいidではなく、行きたいコミットのidです。これは私が立ち往生した唯一のポイントでした。
プッシュ
git Push -f <remote> <branch>