LoginSignup
17
18

More than 5 years have passed since last update.

git - 無意味なcommitを意味のあるcommitに作りなおす

Last updated at Posted at 2014-02-06

背景

コードをガーッと書いてcommitを積み上げて、最終的にキレイな意味のあるcommitにしたい、という事があると思います。僕はあります。そういうときに、自分なりにやっているコードの整理フローです。

注意

以下のフローではrebaseを利用します。
もうご存知かとは思いますが、rebaseは簡単にcommitの歴史が変えられてしまうので、複数人で開発しているときに実行するのはチームメンバーに確認をとった上で行ないましょう。

commit操作の概要

commitの意図は「要求されている機能を一通り実装したのでごっそりcommit」「まずはmodel部分だけ書いてテスト通ったからcommit」「一時的に別の案件の作業をするためちょっとcommit」、などその時々で様々だと思います。それらいろんな意図で詰み上がってしまったcommit達をわりと大規模にrebase/resetなどし、意味のあるcommitを作ります。意味のあるcommitができるとrevertもしやすくなります。

詳細な手順

まずは、対象となるrepositoryをcloneし、整理する対象のブランチをチェックアウトします。

$ git clone git@github.com:radioboo/sample.git
$ cd sample/
$ git checkout -b function origin/function

チェックアウトしたら、これまで蓄積してきたコミット群を1つにまとめてみます。
いろいろとやり方はあると思いますが、今回はrebase -iでsquashして履歴をひとつにまとめます。

$ git rebase -i HEAD~13
普通にrebaseの手法でsquashします
$ git log -n 1 --oneline
abcd123 新機能の差分全て    ←ひとつになりました

ここまでくると、現在HEADにそれまで積んだcommitをすべてまとめた差分が出来ているはずです。この状態でgit resetし、HEADを一個前に戻してやります。するとそれまでHEADにコミットされていた差分がresetされて、差分ファイルたちはUnstagedな差分となります。

$ git reset HEAD~1
Unstaged changes after reset:
M lib/Hoge/Model/Hogehoge.pm
M lib/Hoge/Controller/Fugafuga.pm
M t/lib/Hoge/Model/Hogehoge.t
M t/lib/Hoge/Controller/Fugafuga.t

ここまで戻せば、あとは必要なファイルを再度add→commitすることが出来るようになるので、それぞれ必要な順番でcommitを再度積んでいくことで意味のある整理されたcommitが作成できると思います。

17
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
18