なんだこれは

はてなダイアリーから移転しました。

merge --allow-unrelated-histories

merge --allow-unrelated-histories

自分たちの local の git に OSSソースコードだけをtarball だけ持ちこんで開発しておいてあとから、やっぱり、オリジナルのgitの履歴も見たいっていいだすのってあるあるですよね

ないよそんなこと、あったらこんな記事書かないよ

git ってあとからそんな 馬鹿な ことできるんですよ、そう merge --allow-unreleated-historiesを使えばね

TLDR;

git checkout -b remote-xxxx-yyy $(git log --pretty=%H | tail -1)
git merge --allow-unrelated-histories remotes/xxxx/yyyy

やり方

まず最初に、ローカル環境にある開発中のリポジトリに オリジナルの git を登録します <original-oss-url> は オリジナルのgitリポジトリのURLで、xxxx は適当な名前、例えば base でもいいです

git remote add xxxx <original-oss-url>

それから、xxxx の情報をfetchで取得してからリモートも含めてブランチを全部表示させます。そこで git のログを取得したいブランチを探します。例えば、remotes/xxxx/main のような名前のはずです。

git fetch xxxx
git branch -a

そこで、安全のために今の開発リポジトリの一番古い HASH $(git log --pretty=%H | tail -1) から適当な名前のブランチを追加させてそこに 先程選んだ ブランチをマージしましょう。ここで --allow-unrelated-histories は履歴関係のないもののマージを許可させるという意味です。

git checkout -b remote-xxxx-yyy $(git log --pretty=%H | tail -1)
git merge --allow-unrelated-histories remotes/xxxx/yyyy

あとは、git log --graph でも行なって確認してみましょう。

そう、あとはこんなことをしなくて済むように最初からltarball でソースコードを持ち込むなんてことはしないようにお願いします。