Skip to content

Instantly share code, notes, and snippets.

@taea
Last active December 12, 2015 11:59
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save taea/4769186 to your computer and use it in GitHub Desktop.
Save taea/4769186 to your computer and use it in GitHub Desktop.
git-cherry-pickでmasterのSassを最新に

git-cherry-pick で master のSassを最新に

トピックブランチでデザイン作業後、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 <igiari@gmail.com>
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をわけておくの超オススメ

それ以外のケース(cherry-pickしたcommit内にSass以外の不要なファイルがある、または必要なSassがコンフリクトしてる)では、以下の手順が追加で必要

まず git reset して全てのファイルをunstage

$ 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で確認すると、不要なファイルの表示が消えているのが確認できる。

ファイル自体はmasterに存在しているが、今はファイル変更をmasterに取り込みたくないファイルは git checkout

$ git checkout hoge/hoge.html.haml

$ git status

git statusで確認すると、checkoutした不要なファイルの表示が消えているのが確認できる。

今回取り込みたい変更を含み、かつコンフリクトしてるファイルは、通常のコンフリクト解消と同様に、エディタで開いてコンフリクトを修正して git add

$ 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から作業が進められる。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment