1. ホーム
  2. git

リモートリポジトリに変更をプッシュするときの Git の警告メッセージは何ですか?

2023-09-15 17:22:05

質問

説明が少し簡潔です。私は単にローカルの master ブランチにファイルを追加し、それをリモート リポジトリにプッシュバックしただけです。なぜこれが出てくるのか、何か思い当たることはありますか?

警告: 現在のブランチを更新しています
警告 現在チェックアウトされているブランチを更新すると、混乱が生じる可能性があります。
警告: インデックスと作業ツリーには HEAD にある変更が反映されないからです。
という警告が表示されます。その結果、先ほどプッシュしたばかりの変更を見ることになるかもしれません。
警告: そのブランチで 'git diff' を実行すると元に戻ってしまいます。
警告: 作業を始める前に 'git reset --hard' を実行し、リカバリしてください。
警告 
の警告が表示されます。設定変数 'receive.denyCurrentBranch' の値を
警告: リモートリポジトリの 'receive.denyCurrentBranch' 設定変数を 'refuse' に設定すると、そのリポジトリへのプッシュが禁止されます。
警告: 現在のブランチへのプッシュを禁止します。
警告: 現在のブランチへのプッシュを禁止するには 現在のブランチへのプッシュを許可するには、'ignore' に設定します。
警告: しかし、これは作業内容を更新する予定がない限り、推奨されません。
警告: しかし、他の方法でプッシュしたものと一致するように作業ツリーを更新していない限り、これは推奨されません。
警告 
という警告が表示されます。このメッセージを消すには、'warn' に設定します。
警告 
警告を表示します。将来のバージョンの git では、このデフォルトが変更される予定であることに注意しましょう。
警告: が設定されていない限り、現在のブランチの更新を拒否するようになります。
warning: 設定変数に 'ignore' あるいは 'warn' のいずれかが設定されていない限り、現在のブランチの更新は拒否されることに注意しましょう。  

どのように解決するのですか?

実は、この意味はほとんどそのままです。あなたがプッシュしようとしているリポジトリで誰かが作業をしていて、その誰かがあなたがプッシュしようとしているのとまったく同じブランチを現在チェックアウトしている、ということです。

なぜなら、彼らは自分がそのブランチの最新版をチェックアウトしたと思っていますが、実際にはあなたがそのブランチをより新しいバージョンに更新したばかりだからです。そのため git commit , その のコミットは、基本的にあなたがプッシュしたすべてのコミットをリバートします。そして、彼らが git diff を実行すると、何も変更していないにもかかわらず、あなたがプッシュしたものと反対のものが表示されます。

そのため、ベアリポジトリではないリポジトリにプッシュするのは一般的にバッドプラクティスだと考えられています。ベアリポジトリ、つまり作業コピーを添付していないリポジトリにのみプッシュすべきです。少なくとも、現在チェックアウトされているブランチにはプッシュしないようにすべきですし、一般的には、他人のリポジトリに自分のコードを押し込むのではなく、代わりに自分からプルするよう依頼すべきです。

Git リポジトリからウェブサイトを提供していて、そこにプッシュすることでウェブサイトを更新したい場合などの特殊なケースでは、現在チェックアウトされているブランチにプッシュすることは実際に理にかなっています。 を更新します。 を実際に更新するフックをインストールしなければなりません。