トピックブランチでデザイン作業後、masterにマージされるまでの間、masterのSassが最新のものから乖離してしまって作業が進められない問題を解決するために、git-cherry-pickで必要なSassの変更のみをmasterに取り込む
※この際、Sassだけcommitを分けると楽 → 不要なファイルやコンフリクトがなければそのままcommitごとmasterに取り込まれるので超ベンリです。
作業中のトピックブランチで git log
して必要なcommitのIDをコピー
$ git log
commit一覧が出てくるので、masterに取り込みたい「commit」の右側の文字列をコピー(下記の場合は 88ca4f2b3958748baf9947dcf1fdaebc01616cf6
をコピー)
commit 88ca4f2b3958748baf9947dcf1fdaebc01616cf6
Author: taea <[email protected]>
Date: Tue Feb 12 21:26:40 2013 +0900
Sass for top/index
masterに移動
$ git checkout master
先ほどコピーしたcommitのIDを git cherry-pick
$ git cherry-pick 88ca4f2b3958748baf9947dcf1fdaebc01616cf6
この時点でcherry-pickしたcommit内に不要なSass以外のファイル、もしくはSassのコンフリクトがなければ、即座にcommitがまるごとmasterに取り込まれ、全作業が完了するので、Sassの変更だけcommitをわけておくの超オススメ
$ git reset .
↓
$ git status
git status
で確認すると全部のファイルが赤く表示され、unstageされた状態が確認できる。
cherry-pickしたcommit内の変更ファイルの中で、ファイル自体がまだmasterに存在せず、今はmasterに取り込みたくないファイルはrmしてOK( git rm
ではなく rm
でよい)
1ファイル単体の場合
$ rm hoge/hoge.html.haml
ディレクトリごと消したい場合
$ rm -r hoge/*
↓
$ git status
git status
で確認すると、不要なファイルの表示が消えているのが確認できる。
$ git checkout hoge/hoge.html.haml
↓
$ git status
git status
で確認すると、checkoutした不要なファイルの表示が消えているのが確認できる。
$ vim hoge/hoge.css.sass
↓
コンフリクトを修正してadd
↓
$ git add hoge/hoge.css.sass
↓
$ git status
git status
で確認すると、今回取り込みたいファイル変更のみが緑色でstageに上がっている表示が確認できる。
この手順がひと通り終わったら、cherry-pickをマージしたことを示すコメントをつけて、 git commit
$ git commit -m 'Merge cherry-picked Sass for top/index'
↓
$ git log
git log
して、上記がcommitがmasterに入ったことを確認できたら完了!
これでmasterに最新の状態のSassが入り、masterから作業が進められる。