GitのオブジェクトIDの記号空間は膨大で、その記号空間の部分集合を頂点集合とする有向グラフがイデアル・リポジトリ。物理リポジトリは時間スナップショットであるリポジトリ状態を持つ。状態はイデアル・リポジトリだと考えていい。状態の時間遷移系列が我々が認識しているリポジトリ。これはデータベースのテーブル状態とテーブルの関係と同じ。
物理リポジトリのあいだは関係性のリンクで結ばれる。push-pull が関係性リンクの有向辺。push-pullに制約があるようだが、この制約を満たさないとエラーになる。その例が
fatal: refusing to merge unrelated histories
これが次の状況で出現した。
- bitbucket に新リポジトリ作成
- ローカルリポジトリをbitbucketリポジトリにpush
- bitbucketリポジトリを削除して、同名のリポジトリを再作成。
- ローカルリポジトリをbitbucketリポジトリにpush → エラー
そりゃエラーが出るわな。対策は、次の記事にあった。
git merge --allow-unrelated-histories origin/main を使う。