git subtree のコミット履歴は順番どおりになる
たまたま git subtree を使う機会があったのでメモです。 説明を読むと理論上は時系列が考慮されるように思えましたが、念のため検証したところ、ちゃんとコミットした順番に並ぶことが確認できました。
2つの Git Repositoryを作りました。
そして、 foo
, bar
と交互に commit しています。
コミットログの先頭の数字が通し番号になっていて、これが実際の作業順です。
ここで、subtree として foo に bar を追加します。
$ git remote add subtree-bar https://github.com/suzushin54/subtree-bar.git $ git subtree add --prefix=subtree-bar subtree-bar master git fetch subtree-bar master remote: Enumerating objects: 6, done. remote: Counting objects: 100% (6/6), done. remote: Total 6 (delta 1), reused 6 (delta 1), pack-reused 0 Unpacking objects: 100% (6/6), 447 bytes | 149.00 KiB/s, done. From https://github.com/suzushin54/subtree-bar * branch master -> FETCH_HEAD * [new branch] master -> subtree-bar/master Added dir 'subtree-bar' $ git log --oneline 2a8292d (HEAD -> master) Add 'subtree-bar/' from commit '5f80d93e873e67467ffc7b0b405c90a8b2413223' 5f80d93 (subtree-bar/master) 4. second commit in bar c07738d (origin/master) 3. second commit in foo 7702b0a 2. first commit in bar 226cc4e 1. first commit in foo
ちゃんと、1〜4の順番に並ぶことが確認できました。
ついでに、順番を入れ替えたり、foo の Repository から bar のファイルを更新したりしてみました。
それでも特に変わったことはなく、マージコミットが作られる、コンフリクトが発生したら普段どおり解消してコミットする、という通常の開発時における操作で対応できることを確認できました。
$ git log --oneline 23dae13 (HEAD -> master, origin/master) Merge commit '341fc6e882d31032c07e28785c03541cef699af9' 341fc6e (subtree-bar/master) 10. fifth commit in bar 14f9102 9. fifth commit in foo 9c48859 Merge commit 'c04367496b48f971f6a2ce540f3fad2eadbce74c' 04ef6bd 8. fourth commit in foo c043674 7. fourth commit in bar 04b27d3 Merge commit '7687befaf4b8dbf5ed68b5668bb1996f1acaf51a' 7687bef 6. third commit in bar 6b824b3 5. third commit in foo 2a8292d Add 'subtree-bar/' from commit '5f80d93e873e67467ffc7b0b405c90a8b2413223' 5f80d93 4. second commit in bar c07738d 3. second commit in foo 7702b0a 2. first commit in bar 226cc4e 1. first commit in foo