Gitの安全機能が表示されています。ブランチのヘッドコミットは、プッシュするブランチの現在のヘッドコミットの直接の子孫ではないため、Gitはリモートブランチをブランチで更新することを拒否します。
これが当てはまらない場合、2人のユーザーがほぼ同時に同じリポジトリにプッシュすると、同時に新しいコミットが発生したことを認識できず、最後にプッシュした人はいずれもせずに前のプッシャーの作業を失います。彼らはこれを実現しています。
自分だけがプッシュしていることがわかっていて、修正されたコミットをプッシュするか、ブランチを巻き戻すコミットをプッシュしたい場合は、-fスイッチを使用してGitにリモートブランチを強制的に更新できます。
git push -f origin master
Gitではリモートリポジトリが構成変数を使用して遠端で非早送りプッシュを拒否できるため、これでも機能しない場合がありますreceive.denynonfastforwards。この場合、拒否の理由は次のようになります(「リモート拒否」の部分に注意してください):
! [remote rejected] master -> master (non-fast forward)
これを回避するには、リモートリポジトリの設定を変更するか、ダーティハックとしてブランチを削除して再作成する必要があります。
git push origin :master
git push origin master
一般的に、最後のパラメーターgit pushは形式を使用します<local_ref>:<remote_ref>。ここlocal_refで、はローカルリポジトリremote_refのブランチの名前で、はリモートリポジトリのブランチの名前です。このコマンドペアは2つの省略形を使用します。:masternull local_refがあるので、nullブランチがリモート側masterにプッシュされます。つまり、リモートブランチが削除されます。ブランチ名がない場合:、指定された名前のローカルブランチが同じ名前のリモートブランチにプッシュされます。masterこの状況ではの略ですmaster:master。