Top / GitHub / 開発手順

まだまだ試行錯誤中です。

Gitを使ってちゃんとした(?)開発の手順を整理中です。

イメージとしては master は本番稼働として管理して、そこから派生する開発用のdevブランチがあって、そこからさらにチケットごとにブランチ(下記の例でdev_#50 とか)が作成され、チケットの対応が完了したらdevブランチにマージされていく、、、ってイメージ。

事前準備

GitHub上では masterとdevというブランチが作成済みという前提で進めます。ちなみに、dev ブランチのGitHubへの作成はたとえばGitHub/クローンからプッシュまでの流れをみてみてください。

ローカルの環境に初回やること

まずは リモートのdev ブランチのCloneをローカルに作成します。

$ git clone https://github.com/xxxxxx/helloworld.git
$ cd helloworld
$ git log  --decorate --oneline
9a6a57c (HEAD -> master, origin/master, origin/dev, origin/HEAD) Initial commit
$ git branch
* master
$ git checkout -t origin/dev     <-リモートのBranch(dev)から作成して移動。devは自動的にorigin/devを追跡するようにする
Branch dev set up to track remote branch dev from origin.
Switched to a new branch 'dev'
$ git log  --decorate --oneline
9a6a57c (HEAD -> dev, origin/master, origin/dev, origin/HEAD, master) Initial commit
$ git branch
* dev
  master

ここまでで、devというローカルのブランチが作成・チェックアウトされました。各開発環境で初回やるのはここまでで、チケットを対応する際はつぎからの手順を実施します。

チケットごとのブランチの作成

$ git checkout -b dev_#50   dev <- チケット番号のイメージ。devからのブランチの作成と移動
Switched to a new branch 'dev_#50'
$ git branch
  dev
* dev_#50
  master

devから派生したチケット番号#50用のブランチが作成できました。

ちなみに、下記の下記のコマンドで

$ git branch -vv
  dev     bbf5c22 [origin/dev] committed on 2017.1.27
* dev_#50 bbf5c22 committed on 2017.1.27
  master  818f281 [origin/master] Merge

いま作成したブランチdev_#50 がどのリモートブランチも追跡していない(紐付いていないというか) 事を確認します。

細かなコミットとかを進めていく使い捨てブランチを作成

$ git checkout -b dev_#50_spike dev
$ git branch
  dev
  dev_#50
* dev_#50_spike
  master

ここまでを図で示すとこんな感じ。

01.png

開発はここで進めていきます。全体に反映されたくないようなコミットはココにやっていきます(とりあえずコミット!とかね)。。 なので、コミットを進めていくと下記の図のような感じになります。

02.png

チケット毎のブランチへのマージコミット

最終的に対応が完了したら、dev_#50にコミットをマージします。コミットを他のブランチにまとめる手順は GitHubでコミットをまとめる に整理してあります。

$ git checkout dev_#50   ←移動して
$ git merge --squash dev_#50_spike 

dev_#50_spikeで作業していた内容が、まるっと dev_#50にマージされました(下図の左の状態)。

あとはこれらをコミットするときにちゃんとコメントを書いてコミットすれば、プッシュしても恥ずかしくない履歴が残せます。

$ git commit -a
03.png

そしてリモートのdev_#50へpushして、そこからdevに対してプルリクエストを行い、devへマージしてもらいます。

$ git push origin dev_#50
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/xxxxxx/helloworld.git
 * [new branch]      dev_#50 -> dev_#50
04.png

devの更新分をリベースしてコミット

できることならば dev_#50をプッシュする前に、devの直近更新分をgit rebase で反映させて対応完了としたいです。仕組みの詳細は、 GitHub/マージとリベース に整理しました。プルリクエストを送るには、ここまでやるべきのようですね。

git checkout dev_#50
git rebase dev
... コンフリクトした場合はココでゴニョゴニョするのですが、詳細は上記リンク。

こうやって、dev_#50のしらないdevでの更新分を、dev_#50へ反映させます。

参考


この記事は

選択肢 投票
おもしろかった 0  
そうでもない 0  

Top / GitHub / 開発手順

現在のアクセス:4090


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS