#topicpath ---- #contents まだまだ試行錯誤中です。 Gitを使ってちゃんとした(?)開発の手順を整理中です。 イメージとしては master は本番稼働として管理して、そこから派生する開発用のdevブランチがあって、そこからさらにチケットごとにブランチ(下記の例でdev_#50 とか)が作成され、チケットの対応が完了したらdevブランチにマージされていく、、、ってイメージ。 ** 事前準備 [#p44aa929] GitHub上では masterとdevというブランチが作成済みという前提で進めます。ちなみに、dev ブランチのGitHubへの作成はたとえば[[GitHub/クローンからプッシュまでの流れ]]をみてみてください。 ** ローカルの環境に初回やること [#f3ad2b35] まずは リモートの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の作成と移動 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というローカルのブランチが作成・チェックアウトされました。各開発環境で初回やるのはここまでで、チケットを対応する際はつぎからの手順を実施します。 **チケットごとのブランチの作成 [#de37d929] $ git checkout -b dev_#50 dev <- チケット番号のイメージ。devからのブランチの作成と移動 Switched to a new branch 'dev_#50' $ git branch dev * dev_#50 master devから派生したチケット番号#50用のブランチが作成できました。 **細かなコミットとかを進めていく使い捨てブランチを作成 [#qff1d031] $ git checkout -b dev_#50_spike dev $ git branch dev dev_#50 * dev_#50_spike master ここまでを図で示すとこんな感じ。 #ref(01.png) 開発はここで進めていきます。全体に反映されたくないようなコミットはココにやっていきます(とりあえずコミット!とかね)。。 なので、コミットを進めていくと下記の図のような感じになります。 #ref(02.png) ** チケット毎のブランチへのマージコミット [#a8c8ef70] 最終的に対応が完了したら、dev_#50にコミットをマージします。コミットを他のブランチにまとめる手順は [[GitHubでコミットをまとめる>GitHub/コミットをまとめる]] に整理してあります。 $ git checkout dev_#50 ←移動して $ git merge --squash dev_#50_spike dev_#50_spikeで作業していた内容が、まるっと dev_#50にマージされました(下図の左の状態)。 あとはこれらをコミットするときにちゃんとコメントを書いてコミットすれば、プッシュしても恥ずかしくない履歴が残せます。 $ git commit -a #ref(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 #ref(04.png) ** devの更新分をリベースしてコミット [#jb31c024] できることならば dev_#50をプッシュする前に、devの直近更新分をgit rebase で反映させて対応完了としたいです。仕組みの詳細は、 [[GitHub/マージとリベース]] に整理しました。プルリクエストを送るには、ここまでやるべきのようですね。 git checkout dev_#50 git rebase dev ... コンフリクトした場合はココでゴニョゴニョするのですが、詳細は上記リンク。 こうやって、dev_#50のしらないdevでの更新分を、dev_#50へ反映させます。 **参考 [#i150b780] -[[7. merge --squash【チュートリアル3 コミットを書き換えよう!】 | サルでもわかるGit入門 〜バージョン管理を使いこなそう〜 | どこでもプロジェクト管理バックログ>http://www.backlog.jp/git-guide/stepup/stepup7_7.html]] -[[GitHubへpull requestする際のベストプラクティス - hnwの日記>http://d.hatena.ne.jp/hnw/20110528]] ---- この記事は #vote(おもしろかった,そうでもない) #comment #topicpath SIZE(10){現在のアクセス:&counter;}