この記事はアピリッツの技術ブログ「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について書いてある参考書やサイトを渡り歩いてる段階です。
まだまだ打ったことないコマンドもたくさんあり、そういった実際に体感していないものは全然身になっていないのでコマンド打つたびに怯える日々です。
状況に応じていろんなコマンドを少しずつ使ってマスターしたいと思います。