web-dev-qa-db-ja.com

「git Push」後にローカルおよびリモートで「git commit」を元に戻すにはどうすればよいですか

git commitに続いてgit Pushを実行しました。ローカルリポジトリとリモートリポジトリの両方でその変更を元に戻すにはどうすればよいですか?

$ git log
commit 364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8
Author: Michael Silver <Michael [email protected]>
Date:   Tue Jun 11 12:24:23 2011 -0700
217
michael
git reset --hard HEAD~1
git Push -f <remote> <branch>

(プッシュの例:git Push -f Origin bugfix/bug123

これにより、最後のコミットが取り消され、更新された履歴がリモートにプッシュされます。リモートのアップストリーム履歴を置き換えるため、-fを渡す必要があります。

365
Alexander Groß

通常、以下を使用して「逆」コミットを行います。

git revert 364705c

その後、通常どおりリモートに送信します。

git Push

これはコミットを削除しません。最初のコミットが実行したものをすべて取り消す追加のコミットを作成します。特に変更がすでに伝播されている場合は特に、安全ではないその他のもの。

150
Amadan

まず、リラックスしてください。

「私たちの制御下にあるものは何もありません。私たちの制御は単なる幻想です。」、「エラーは人間です」

意図せずにコードをremote-masterにプッシュしたことがわかります。これは大丈夫です。

1。最初に、返そうとしているコミットのSHA-1値を取得します。 masterブランチにコミットします。これを実行します:

git log

各コミットとともに文字列のような「f650a9e398ad9ca606b25513bd​​4af9fe ...」の束が表示されます。 戻りたいコミットからその番号をコピーします.

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コマンドのおかげです。

そのためには、 このブログ または この投稿 に従うことをお勧めします。

35
kmonsoor

git reset HEAD~1変更を削除したくない場合(ステージングされていない変更)。変更、コミット、もう一度プッシュgit Push -f [Origin] [branch]

7
softvar

インタラクティブなリベースを行うことができます:

git rebase -i <commit>

これにより、デフォルトのエディターが表示されます。削除したいコミットを含む行を削除して、そのコミットを削除します。

もちろん、この変更をリモートリポジトリに適用するには、リモートリポジトリにアクセスする必要があります。

この質問を参照してください: Git:選択したコミットをリポジトリから削除する

3
Jack Edmonds

代わりに:

git Push Origin +364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8^:master

Originリモートリポジトリのマスターブランチを最後のコミットの親に強制します

2
MicRum

使用してみてください

git reset --hard <commit id> 

注:ここで、commit idはリセットしたいidではなく、行きたいコミットのidです。これは私が立ち往生した唯一のポイントでした。

プッシュ

git Push -f <remote> <branch>
2
Mohit Dhawan