1. ホーム
  2. ギット

[解決済み】Git Push エラー: チェックアウトされたブランチの更新ができない

2022-04-06 10:34:41

質問

いくつかのマージの競合を解決してコミットし、変更をプッシュしようとしたところ、次のエラーが発生しました。

c:\Program Files (x86)\Git\bin\git.exe push --recurse-submodules=check "origin" master:master
Done
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error: 
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error: 
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To C:/Development/GIT_Repo/Project
 ! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'C:/Development/GIT_Repo/Project'

このエラーの原因についてご存知の方はいらっしゃいますか?

解決方法は?

理由:非ベアリポジトリにプッシュしています。

リポジトリには2つのタイプがあります。 ベアとノンベア

ベアリポジトリは作業コピーを持っておらず、プッシュすることができます。Githubで得られるリポジトリはこのタイプです! ベアリポジトリを作成したい場合は、次のようにします。

git init --bare

つまり、簡単に言うと ベアでないリポジトリにプッシュすることはできません。 (編集:まあ、リポジトリの現在チェックアウトされているブランチにプッシュすることはできませんが。ベアリポジトリでは、どのブランチもチェックアウトされていないので、プッシュできます。可能ですが、ベアリポジトリでないところへのプッシュは一般的ではありません)。できることは、他のリポジトリから取得し、マージすることです。このように pull request Githubで見ることができるのは、その仕組みです。自分からプルするように相手に頼むのであって、無理矢理押し込むのではありません。


更新情報 : VonC さんのご指摘により、最新の git バージョン (現在 2.3.0) になりました。 ベアリポジトリでないチェックアウトブランチへのプッシュは可能です。 . へのプッシュはできません。 ダーティ 作業ツリーで、いずれにせよ安全な操作ではありません。