git ls-remote origin HEAD
(リモートチップ)と(ローカルチップ)のSHAgit rev-parse HEAD
が等しいかどうかを確認しますか?
これを行うことで、 Gitの柔軟性の多くを捨てていることに注意してください-それが本当にあなたがやりたいことであるかどうかを考えてください。の強みの一部はgit pull
、マスターコピーから分岐したものをコミットした場合でも、マスターコピーからプルすると、変更をマージできることです(ほとんどの場合、プロセスは完全に自動化されています)。
線形のコミット履歴(独自のトレードオフがあります)を目標とする場合は、rebase
開発者にオリジン/マスターの背後でコミットしないように強制するのではなく、コマンドを確認することをお勧めします。
編集
実際、git pull
(リベースではなく)単に実行している場合、プルはマージコミットを実行するため、ヘッドを比較することはできません。git ls-remote origin HEAD
代わりに、と比較する必要がありますgit merge-base origin/HEAD HEAD
。
他のコメント
なぜGitを使用しているのに、余分なブランチをまったく使用していないのですか?これは、車を購入するようなものですが、エンジンを使用することはありません(代わりに、どこにでも押し込むだけです)。ブランチはGitで安価で、セットアップが速く、マージするのもほとんど簡単です。あなたがそれらを利用しなければ、あなたは自分自身を不幸にしているのです。
変更を加える前に、なぜ全員が最新の状態になっていることを気にするのですか?これはCVSではなく、競合の解決はひどいものではありません-Gitは、何もしなくても競合の95%を自動解決するのでgit pull
、変更を加える前か後かは重要ではありません-あなただけです押す前に引っ張る必要があり、大丈夫です。
前のポイントに関連して:非早送りプッシュはデフォルトで拒否されるため、実際にはフックは必要ありません。開発者に「プッシュが早送りではないとして拒否された場合は、を実行してgit pull
からもう一度プッシュしてみてください」と伝えるだけで、すべてが機能します。