LoginSignup
0
2

More than 5 years have passed since last update.

Gitで何回もコミットとマージをしたブランチをコミットだけをチェリーピックしてブランチ造り直す方法

Posted at

こんなことをすることになった経緯
1. branchBをベースにつくったbranchAがあります。
2. branchAでは何回もCommit(& Push)をしました。
3. branchBの変更を取り込むためにbranchBをbranchAへ何度かMargeをしました。
4. とある日・・・branchDをベースにしなければならないことが発覚しました:scream:
5. branchDをベースにしてbranchCを造ることになりました:cold_sweat:

  • branchA : 何回もコミットとbranchBをマージをしたブランチ
  • branchB : branchAのベースになったブランチ
  • branchC : buranchAのコミットだけをチェリーピックしたいブランチ
  • branchD : branchCのベースにしたいブランチ

1. branchAをCheckoutする

$ git checkout branchA

2. コミットのハッシュとコメントをCSVに出力する

  1. コミットのハッシュとコメントを確認する
  2. ブランチが開始されたCommitを特定する
  3. 特定したコミットの日付を確認する
  4. 特定したコミットの日付以降のハッシュとコメントをCSVに出力する
$ git log --pretty=onelinere
7c4a... {Commitコメント1}
c037... Merge branch 'master' of ....
3bb5... {Commitコメント2}
...<省略>...

$ git log 1201...
commit 1201...
Author: xxxxxx
Date:   Sun Apr 16 17:32:17 2017 +0900

    {Commitコメント}

$ git log --pretty=onelinere --after='2017-04-16 17:32:00' > cherry-pick.csv

3. CSVを加工してcherry-pick用コマンドを造る

  1. CSVをExcelで開く
  2. コメントが「Merge branch~」になっている行(Marge)を削除する
  3. 列を左に挿入して降順で番号をつける
  4. 古いCommit順に並べるために、挿入した番号の昇順でソートする
  5. 連番とコメントを削除してハッシュのみ残す
  6. ハッシュの隣の列に「="git cherry-pick "&{ハッシュのセル}」を入れて一気にコマンドを造る

4. branchCを造る

  1. branchDをチェックアウトする
  2. branchCを造る
$ git checkout branchD
$ git checkout -b branchC

5. branchCにbranchAのCommitだけcherry-pickする

  1. 3. で造ったcherry-pickコマンドを次々に実行する
  2. 途中でコンフリクトしたら解決して再度実行していく
$ git cherry-pick 1201...
$ git cherry-pick 8bf1...
$ git cherry-pick d5c8...
$ git cherry-pick c2b9...
...<省略>...
0
2
4

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
0
2