will and way

ただの自分用メモを人に伝える形式で書くことでわかりやすくまとめてるはずのブログ

Gitでコミット履歴を整理したい時に覚えておきたいコマンド(編集中)

シーン: featureブランチから更に作業ブランチを作ってた場合

f:id:matsuokah:20151016013044p:plain

上記のようにfeature/Aから枝分かれして並列で開発している時に、BのマージコミットをしたあとにC...C''のリベースをしようとするとなかなか大変だなーと思う時がありました。 そこで

  1. feature/AB'''feature/AC''B'''を比較してCのコミットハッシュを取得する
  2. feature/ADを作り、1で取得したコミットをcherry-pickしてリベース
  3. feature/AD'feature/AB'''にマージする

とすればわりと履歴が編集しやすくなるとと思いました。

1. まず差分のハッシュリストを取得する
$ git --no-pager log --no-merges --pretty=oneline ...`git rev-parse feature/AB'''`

330a340d25477683baf0767e471b8ed28fea41a9 Fixed hoge
f8ca306bb8e94a7ef899c42bc3097ba8d569e18c Fixed fuga
7f8d6461240e2b618982d39371d77dae89a206c9 Fixed barr
2. feature/ADcherry-pick
$ git checkout feature/A
$ git checkout -b feature/AD
$ git cherry-pick 330a340d25477683baf0767e471b8ed28fea41a9
$ git cherry-pick f8ca306bb8e94a7ef899c42bc3097ba8d569e18c
$ git cherry-pick 7f8d6461240e2b618982d39371d77dae89a206c9
$ git rebase -i HEAD~3
3. feature/AB'''にmerge
$ git checkout feature/A
$ git pull
$git merege feature/AD'

これでなんとかリベースできそう。 本当はgit-nowとかtigを使いこなせればいいんだろうけど、まだまだ初心者であります...!