0

私と同僚の 1 人は、次のようなコミット履歴を持つ git master ブランチに取り組んでいます。

A -> B -> C -> D -> E -> F -> HEAD

ここで、私の同僚が commit # "C" で master ブランチをチェックアウトし、ローカルの変更を作成してコミットする作業を開始しました。その間、コミット「D」と「E」で master ブランチを前に移動しました。

その後、私の同僚はプルを行わずにコミット「F」を介して変更をプッシュし、このコミットは基本的にコミット「D」と「E」の私の変更を無効にしました。これは期待されていますか?変更をプッシュする前にワークスペースを HEAD に同期する必要があると git で文句を言わなかったのはなぜですか?

4

1 に答える 1

2

あなたの同僚の力がブランチをプッシュしたように聞こえます。それは、あなたが行ったコミットが彼のローカルブランチにない場合は破棄されます。Git は通常、プッシュしようとしてブランチにリモート エンドのすべてのコミットが含まれていない場合に文句を言います。Git がサイレントに更新されるのを見たのは、リポジトリがミラーとして設定されているときだけです。

プッシュを強制する機能を削除するのは好きではありません。それが正しいことである場合があるからです。それらを無効にしたい場合はreceive.denyNonFastForwards、サーバー側のリポジトリで設定することで無効にできます。receive.denyDeletesそうしないと、誰かがマスター ref を削除してから、新しいものをインストールする可能性があります。

pre-receive フックを使用して、マスターが巻き戻されていないことを確認できます。 Git の contrib 領域のupdate-paranoidは、他の気の利いた機能とともに、これを行うことができます。

于 2013-06-25T10:13:29.180 に答える