1. ホーム
  2. git

git reset --hard を使用した後に変更をプッシュすることができない

2023-10-29 12:38:59

質問

私はある間違いを犯し、コミットすべきではない変更をgitにコミットしてしまいました。 コミットした後、私は自分の変更をプッシュしました。 その後、私は私の変更をリセットしようとするために次のコマンドを使用しました。

 git reset --hard head

さて、この「リセット」をこのコマンドでリモートリポジトリにプッシュしたいと思います。

git push MyBranch

しかし、このようなエラーが発生します。

remote: error: denying non-fast-forward refs/heads/branch (you should pull first)

このコマンドで試してみましたが、成功しませんでした。

git push -f "origin" 

何かいい方法はないでしょうか?

どのように解決するのですか?

git push -f origin myBranch 

は動作するはずです (ただし、MyBranch が他のユーザーによってすでに自分のリポジトリに取り込まれている場合は危険です)。

注意: リモートリポジトリ ('origin') がその コンフィグ で設定されている場合

receive.denyNonFastForwards true

を指定すると、早送り以外のプッシュを拒否します (強制されても)。

" を参照してください。 git push --force' を拒否するように git リポジトリを設定する方法はありますか? "を参照してください。


OPユーザー654019 の報告

<ブロッククオート

今回、なんとか解決したのは denyNonFastForwardsfalse を使用し -f を使って強制的にプッシュします。

OPがレポにアクセスできなかったら

  • ローカルの HEAD を元の位置にリセットします (" を参照)。 から回復する git reset --hard? ")となります。

    git reset HEAD@{1}
  • を作る 新しい で説明されているように、マージをキャンセルするコミットを行います。 ProGitブック で説明されています。 git revert :

    git revert -m 1 HEAD~ (あなたの場合)

例によって

$ git revert -m 1 [sha_of_C8]
Finished one revert.
[master 88edd6d] Revert "Merge branch 'jk/post-checkout'"
 1 files changed, 0 insertions(+), 2 deletions(-)

<イグ

マージを元に戻す方法に関する完全な議論は、以下のとおりです。 はここにあります。 .

のみを生成することに変わりはありません。 新しい コミットのみを生成し、マージコミットによってもたらされた変更を取り消すこともできます。

そして、その新しいコミットを早送りの変更としてプッシュすることができます。