git init してから一番最初のcommit内容を、2番目のcommitと一緒にまとめたい、と後で思った。
よーし、git rebase -i HEAD~~
からのfixupで…
えっ・・・(ΦωΦ)
$ git rebase -i HEAD~~
fatal: Needed a single revision
invalid upstream head~~
一番最初のcommitはgit rebase -i HEADほにゃららでは遡れないのか・・・
一番最初のcommitはgit rebase -i できないのか・・・?
— TAE ✅ (@ken_c_lo) April 21, 2013
おお!最初に空のinitial commit 作るの頭いい!なるほど…@ken_c_lo それ方法あったら知りたいですねー。調べた限りでは無さそうなのもあって、自分でリポジトリ作る時はgit flow initを使って最初に空のInitial commitを作るようにしてます
— ルエダップ (@ruedap) April 21, 2013
@ken_c_lo やってみないとわかりませんが。git checkout --orphan で別世界のブランチを作成して、そこにファーストコミットをつくって、次に元々のファーストをコピーしてcommit、後はcherry-pickで残りのコミットを以降というのはどうかな
— GNUE(鵺)♓ (@gnue) April 21, 2013
git checkout --orphan
!!! そんな機能があるの知らなかった・・・。gitのorphanブランチを理解する - ::Eldesh a b = LEFT a | RIGHT b
なるほど、何かできそうな気がする。。裏ワザっぽくてカッコイイからやってみたいぞ…。
orphanブランチというのは、元のブランチからの歴史を受け継がず、gitリポジトリ内で新しく0から歴史を持つブランチです。新しくルートになり、親コミットを持ちません。
と思ったら、
おおお!@ken_c_lo git rebase -i --rootでいけまする
— Hideki IGARASHI (@gantawitter) April 21, 2013
_人人人人人人人人人人人人_
> git rebase -i --root <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
↓
$ git rebase -i --root
でたー!first commit.
pick xxxxxxx first commit
pick yyyyyyyy second commit
そんなわけで
git rebase -i --root
とすると、一番最初のcommitから遡ってgit rebase -iしてくれるようです。ということは、すごく長く続いてるプロジェクトとかでこれやったらどうなっちゃうんでしょうね…怖くて試せません。。
で、さっきのを
fixupして、second commitの内容が first commitの中にめでたくまとまり、気に入らない歴史が改ざんされました。
pick xxxxxxx first commit
fixup yyyyyyyy second commit
@ruedap Git様はやはり万物の歴史を塗り替えるのか……
— TAE ✅ (@ken_c_lo) April 21, 2013
Git様、偉大なり…
皆様、ありがとうございました。
濱野 純(Junio C Hamano)
秀和システム
売り上げランキング: 135,129
秀和システム
売り上げランキング: 135,129