その他
    ホーム 技術発信 DoRuby 【git】コミットログ散らかした!ログを編集する方法
    【git】コミットログ散らかした!ログを編集する方法
     

    【git】コミットログ散らかした!ログを編集する方法

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    コミットログの編集の仕方を簡単にまとめてみました。

    はじめに

    最近東京に馴染んできた(気がする)Be82Mです。
    自分が業務上よくcommit漏れしてしまったり、ちょっと実装してはコミット、とちまちまコミットしてログを散らかしがちなのでpush前にコミットをまとめたりするのですが、どうだったっけ?と調べたり時間がなくて結局そのままpushしてしまったり…ということが何度もあったので、今回備忘録としてコミットの改ざんの仕方を自分なりにまとめることにしました。
     

    手順

    今回コミット漏れした場合を例にします。

    とりあえずコミット漏れしたファイルをaddして再度コミットします。

    h82w-no-MacBook-Pro:file Be82M$ git commit -m "コミット漏れ"
    [branch_name f40110a] コミット漏れ
     1 file changed, 2 insertions(+)
    

    ログを確認すると当然ですがコミットログに修正したのが残っています。

    h82w-no-MacBook-Pro:file Be82M$ git log
    commit igtismsmehyoowutrilmoevmeodvreihveorttafbaesaiton
    Author: Be82M <be82m@doruby.com>
    Date:   Mon Jul 24 18:19:48 2017 +0900
    
       コミット漏れ
    
    commit deaomcwmhniadgnoecwcennsaedtamnenfarweie
    Author: Be82M <be82m@doruby.com>
    Date:   Mon Jul 24 12:29:35 2017 +0900
    
        A機能実装完了
     
    

    ここで改竄コマンドgit rebaseが登場です。

    $ git rebase -i branch_name~number

    branch_name: コミットを消したいブランチの名前
    number: コミットログの表示数

    これを実行するとテキストが開きます(稀にテキストエディタ等で開くことがあるそうですが、大概vimで開きます)

      1 pick d83743a B機能実装
      2 pick d99647d A機能実装
      3 pick f40110a コミット漏れ
    

    消したいコミットである3行目のpickをfもしくはfixupに書き換えます。
    ※このオプションについては後述しています。

      1 pick d83743a B機能実装
      2 pick d99647d A機能実装
      3 fixup f40110a コミット漏れ
    

    変更を保存して閉じます。
    もう一度ログを確認して見ます。

    h82w-no-MacBook-Pro:file Be82M$ git log
    commit deaomcwmhniadgnoecwcennsaedtamnenfarweie
    Author: Be82M <be82m@doruby.com>
    Date:   Mon Jul 24 12:29:35 2017 +0900
    
        A機能実装完了
     
    

    これでログをまとめることができました。
     

    オプション

    git rebaseしたときに開くvimの下部にも書いてありますが、毎回英語は読みたくないのでまとめておきます。

    • p, pick

     コミットを使用する
     そのままコミットを残す場合はこのコマンドのままにしておく。

    • r, reword

     コミットメッセージを編集してこのコミットを使用する

    • e, edit

     コミットをなかったことにする(またpickに戻せばコミットは戻ってくる)

    • s, squash

     コミットを前のコミットと融合する

    • f, fixup

     コミットを前のコミットと融合するが、コミットメッセージを破棄する

    • x, exec

     後に書かれたコマンドを実行する

    絶対いらない保証もないので実際にやったことはないのですが、行自体を消すとその行に該当するコミットそのものが完全に消えてしまうようです。
    間違って消してしまわないように気をつけましょう…!
     

    最後に

    業務上欠かせないgitですが、理解しきれておらずgitについて書いてある参考書やサイトを渡り歩いてる段階です。
    まだまだ打ったことないコマンドもたくさんあり、そういった実際に体感していないものは全然身になっていないのでコマンド打つたびに怯える日々です。
    状況に応じていろんなコマンドを少しずつ使ってマスターしたいと思います。