リモートリポジトリの巻き戻しが拒否される
提供: tknotebook
メインページ>コンピュータの部屋#ソフトウェア>Git tips
リモートリポジトリに誤ってコミットしたものを取り消したい場合は、
revert で打消しのコミットを登録するのがまっとうな方法です。
でも少人数でリポジトリを管理していて、最近誰も pull していないことがわかっているなら きれいさっぱり誤りで登録してしまったコミットを削除したいでしょう。
そういう場合は
git reset HEAD~ --hard git push -f
が定石ですが、
g push -f Total 0 (delta 0), reused 0 (delta 0) remote: error: denying non-fast-forward refs/heads/master (you should pull first) To C:/git-repos/remote ! [remote rejected] master -> master (non-fast-forward) error: failed to push some refs to 'C:/git-repos/remote'
となってしまって -f(--force) を付けても push が拒否される場合があります。
これは リモートリポジトリ を
git init --bare --shared
というように --shared オプション付きで作った時、none-fast-forward な push が拒否される設定になっているからです。
--shared は複数の人間でリモートリポジトリを共用するために作るときに指定するオプションで、 一度 pull されたコミットが削除されると大惨事を引き起こす可能性のある git の特性を考えると妥当と言えます。
リポジトリの config ファイルの denyNonFastforwards がその設定で true なら none-fast-forward な push は断固拒否します。
[core] repositoryformatversion = 0 filemode = false bare = true symlinks = false ignorecase = true sharedrepository = 1 [receive] denyNonFastforwards = true