前提
- masterブランチを本番環境で適用する想定
- developブランチをstg環境で適用する想定
今回は、develop
ブランチに機能を追加するため、feature/suda
というブランチを作成し、後でdevelop
ブランチにマージすることを考える。
1.developブランチからfeature/sudaを作成
1-1.developブランチへ移動
git checkout develop
1-2.feature/sudaを作成し、移動する
git checkout -b feature/suda
-b
オプションをつけると、移動とセットでブランチの作成も出来る- 現在のブランチは
git branch
で確認可能
(おまけ)ブランチの削除
もしブランチ名を間違えてfeature/sudaxxx
としてしまったら、消して作りなおそう!
まず、消したいブランチとは異なるブランチに移動し、ブランチを消す。
git checkout develop git checkout -d feature/sudaxxx
2.feature/sudaブランチで作業
実装後、
git add . git commit -am "commit message!" git push origin feature/suda
などとして、remoteに反映。
3.developへのマージ作業
3-1.マージ先のブランチに移動
git checkout develop
3-2.マージ
git merge --no-ff feature/suda
--no-ff
オプション:fast-forwardの関係であっても、必ずマージコミットを作る- 機能追加が見やすいので、僕らのプロジェクトではこの
--no-ff
オプションを使っている - mergeする時、ローカルのdevelopブランチを最新の状態にするのを忘れずに!(以前筆者は躓いた)
▼(参考)図で分かるgit-mergeの–ff, –no-ff, –squashの違い
http://d.hatena.ne.jp/sinsoku/20111025/1319497900
おまけ1
おすすめのgit運用方法
普段gitのブランチをなるべく枝分かれさせないようにし、機能追加の単位でブランチを切るのが個人的なおすすめ。
他の人とpushが交互になる場合、
git fetch origin git rebase origin/master
とすれば、ブランチが分かれず1本につながる。
▼(参考)git rebase 失敗した時の対処法
http://qiita.com/shuntaro_tamura/items/c505b76c1021a35ca9ff
機能追加の時は、上記のようにfeature/xxx
ブランチを切って
git merge --no-ff feature/xxx
によりマージするのがおすすめです。
具体例)
developへのマージ
git checkout develop git merge --no-ff feature/xxx
masterへのプルリク
ブラウザのgithubからプルリク(プルリク後マージされる) mvn clean deploy