「リモートリポジトリの巻き戻しが拒否される」の版間の差分

提供: tknotebook
移動: 案内検索
 
23行: 23行:
 
  ! [remote rejected] master -> master (non-fast-forward)
 
  ! [remote rejected] master -> master (non-fast-forward)
 
error: failed to push some refs to 'C:/git-repos/remote'
 
error: failed to push some refs to 'C:/git-repos/remote'
 +
</pre>
 +
 +
 +
となってしまって -f(--force) を付けても push が拒否される場合があります。
 +
 +
これは リモートリポジトリ を
 +
git init --bare --shared
 +
というように --shared オプション付きで作った時、none-fast-forward な push が拒否される設定になっているからです。
 +
 +
--shared は複数の人間でリモートリポジトリを共用するために作るときに指定するオプションで、
 +
一度 pull されたコミットが削除されると大惨事を引き起こす可能性のある git の特性を考えると妥当と言えます。
 +
 +
リポジトリの config ファイルの denyNonFastforwards がその設定で true なら none-fast-forward な push は断固拒否します。
 +
 +
<pre>
 +
[core]
 +
        repositoryformatversion = 0
 +
        filemode = false
 +
        bare = true
 +
        symlinks = false
 +
        ignorecase = true
 +
        sharedrepository = 1
 +
[receive]
 +
        denyNonFastforwards = true
 
</pre>
 
</pre>

2016年12月9日 (金) 05:14時点における版

メインページ>コンピュータの部屋#ソフトウェア>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