私の意見では、ハッシュコードは一意性の凝縮された表現であるため、重複したgitハッシュを取得できるはずです。したがって、同じハッシュコードを生成する一連の手順があります。さらに重要なことに、さまざまな変更がコミットされても同じハッシュコードが生成される一連の手順が必要です。
たとえば、同じマシン上で同じリポジトリのクローンを2回作成し、異なるリポジトリでほぼ同じ正確な変更(1バイトまたはビットの節約)を行ってコミットします。コミットでディレクトリ名またはタイムスタンプが使用されている場合でも、これを取得できるはずです(まれに付与されますが)。たとえば、2つの異なるマシン上の2人の別々の人が、同時にコミットを行います。
私の質問は2つあります。これはどのように発生し、Gitはどのように処理しますか。
または、より明確に言えば、Gitはプッシュ前に最新の状態になっていることをどのように確認しますか。1人が最初にプッシュし、次にもう1人がプッシュを試み(両方とも同じ親コミットに基づいて変更)、Gitはハッシュコードがリモートとローカルの履歴から一致することを確認し、あなたが行ってもよいと判断し、プッシュしますが、変更の1つを失いましたか?この状況では、私はそれを次のようにもっと見ます:
repo1 a-> b-> c1
repo2 a-> b-> c1'-> c2
たとえば、c1、c1'、c2はすべて、両方のリポジトリがbで複製された後に発生し、repo1がプッシュされ、問題はありません。repo2はc1'とc2をプッシュしようとし、gitはc1' = c1と判断しますが、実際には異なります。 c1のa->b->c1-> c2を取得し、c1'で行われた変更を失いました
これは可能ですか?どのようにそれが起こり、gitは何をしますか?