web-dev-qa-db-ja.com

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

私は間違いを犯し、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" 

私にできることはありますか?

42
mans
git Push -f Origin myBranch 

動作するはずです(MyBranchが他のレポジトリで既に取得されている場合、これが危険になる可能性があることに注意してください)

注:リモートリポジトリ(「Origin」)に config が設定されている場合

receive.denyNonFastForwards true

早送りでないプッシュは(強制された場合でも)拒否されます。
「git Push --force」を拒否するようにgitリポジトリを設定する方法はありますか? 」を参照してください。


OP user654019 レポート

今回はdenyNonFastForwardsfalseに設定し、-fを使用してプッシュを強制することで、問題を解決できました。

OPがレポにアクセスできなかった場合、彼/彼女は以下を行う必要があります。

  • ローカルHEADを元の位置にリセットします( " Recover from git reset --hard? "を参照):
    git reset HEAD@{1}
  • ProGit book で説明されているように、 git revert を使用して、マージをキャンセルするnewコミットを作成します。
    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(-)

revert a merge

マージを元に戻す方法についての完全な説明は、 here にあります。

マージコミットによって導入された変更を元に戻すものを含め、newコミットのみを生成するという考え方が残っています。
その後、早送りの変更として、その新しいコミットをプッシュできます。

82
VonC

プッシュするrefを指定する必要があります。

git Push -f Origin MyBranch
9
ralphtheninja