0

gitのログを汚さない方法

自分専用のリポジトリでおらおらcommitしまくってると、git logを見ると残念な気分になるので無駄なcommitを削除する方法。
しかもファイルはワーキングツリーに残したまま。
revertやresetやrebaseをよく分からぬまま使ってると、ワーキングツリーからファイルがなくなったり新たにlogが残ったりするのでそれ備忘録も兼ねて。
そもそもrevertの「commitを打ち消す」というのを使うべき時に出くわした事がない。

こんなlogがあるとして
$ /Users/aokitakashi/gittest% git log --pretty=oneline
bd8b1801f30354138248a49c8f5764b9e39565d2 Cさん.txt追加
3ec6ad445ab9bda66f05e00ecde6c1bea0615b8b Bさん.txt追加
d319dbca73bc44d9412b22952674011d72d9560e Aさん.txt追加

「Cさん.txt」にもっと情報を追加してcommitすると無駄に増えるのでamendオプションを使って最後のcommitにねじ込む
$ git commit --amend
git reset –soft HEAD^ してcommitしなおすのもだいたい同じ。ワーキングツリーにはC.txtは存在する。

最新ならamendでいいけど、調子にのって無駄なcommitをしまくって以下のような状態になった時

4705656d3c70cdff66dbc107c320dcf6e3d57986 なんかちょっと修正
ef602ec65f24449d1edeb27ae50239e412d0137b test
ff1fae93d9abbbc3ed2a379fad3a2b96ab8e0ef5 ほげほげ
f86cff03d1ca87cc3bca3f54dc39ccea21867622 メンバー情報の保存方法をテキストベースに変更
bd8b1801f30354138248a49c8f5764b9e39565d2 Cさん.txt追加
3ec6ad445ab9bda66f05e00ecde6c1bea0615b8b Bさん.txt追加
d319dbca73bc44d9412b22952674011d72d9560e Aさん.txt追加

rebaseを使う。
$ git rebase -i HEAD~4
エディターが開く。
pick 3ec6ad4 なんかちょっと修正
pick a987a67 test
pick cfb7a8a ほげほげ
pick 0fcbf10 メンバー情報の保存方法をテキストベースに変更

なくしたいcommitのpickをsquashに変更して保存してやれば3つのcommitは消えて下のcommitにねじ込まれる。

squash 3ec6ad4 なんかちょっと修正
squash a987a67 test
squash cfb7a8a ほげほげ
pick 0fcbf10 メンバー情報の保存方法をテキストベースに変更

revertと違って打ち消したというlogも残らないしワーキングツリーからもファイルは消えない。

f86cff03d1ca87cc3bca3f54dc39ccea21867622 メンバー情報の保存方法をテキストベースに変更
bd8b1801f30354138248a49c8f5764b9e39565d2 Cさん.txt追加
3ec6ad445ab9bda66f05e00ecde6c1bea0615b8b Bさん.txt追加
d319dbca73bc44d9412b22952674011d72d9560e Aさん.txt追加

これで共有リポジトリに突っ込んでも恥をかかないはず。

大阪のWEB屋です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です