git squash! fixup! についてメモ

git でコミットをまとめる,編集するといった事をするには git rebase -i を使用する

  • そもそも rebase とは
    • 自分のブランチの根元を継ぎ変える認識
      詳細は別で

自分の開発環境では

  1. ある程度作業する
  2. 作業修正 / 追記で amend commit を繰り返す
  3. rebase で綺麗にして Marge Request をだす

といった感じで進めていた

しかし,amend commit を繰り返すと自分がどこを修正したのかわからなくなるのと,
どういった段階を踏んで作ったのがわからなくなるので,よくないのではと思い,
コミットメッセージをまとめる squash!fixup! について調べてみた


端的にまとめるとコミットログの頭に squash! fixup! が付いていると git rebase -i の際に一々指定しなくていいよっていう程度の事

git commit --(squash|fixup)=hash

  • コミット時に squash | fixup を選んでコミットする
    • squash はメッセージを含むと統合されるコミットに追記される形になる
    • fixup はメッセージを含まずにコミットをまとめる

squash と fixup 同時にやったらめんどくさいことになったので squash だけのテスト

touch 1st 2nd 3rd 4th

git init

git add 1st
git commit -m "first commit"
git checkout master -b sub

git add 2nd
git commit -m "2nd"

git add 3rd
git commit -m "3rd" --squash=HEAD

そしてできるのが以下

% git log --oneline --graph

* f1ad210 squash! 2nd
* e80be23 2nd
* bf67bb1 (master) first commit

この状態で git rebase -i --autosquash を実行すると下記の様に自動的にコマンドに置き換わる

pick e80be23 2nd
squash f1ad210 squash! 2nd

あとは interactive でログの編集をするなどして remote に push するとかする


ちなみに git rebase に関する設定で autosquashautostash の二つがあり,
前者は --autosquash のオプションを自動的に付加するもの
後者は rebase 実行時に自動的に stash に入れて,rebase が完了したら取り出してくれる設定

なので,個人的には日頃からソース更新などする際は git pull ではなく git rebase --autostash の方が勝手がいいのかなという感じ

このブログの目的

大まかに書くこと

プログラムを書く仕事をする上で,気づいたこと思ったこと,こうしたいなと思うことをまとめる なので基本的に,個人的なメモの体裁

現状

  • OpenResty (nginx + lua) に触れている
  • 経験としては浅いので書くことはできても,デザインパターンだったり実装上どう意識して書けば良いのかなどがまだ分かっていない

目標

  • 半年後にはある程度スラスラコード書いて読めるようになってたい

そんなメモを半年後に見返して成長できてると感じられるように