#topicpath
----


#contents


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

キレイにGitをつかって開発しようとするとこんな感じ??
Gitを使ってちゃんとした(?)開発の手順を整理中です。

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

** 初回やること [#f3ad2b35]
** 事前準備 [#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/コミットをまとめる]] に整理してあります。

最終的に対応が完了したら、dev_#50にコミットをマージします。
 $ git checkout dev_#50   ←移動して
 $ git merge --squash dev_#50_spike 

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

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

あとはこれらをコミットするときにちゃんとコメントを書いてコミットすればプッシュできるような履歴が残せますね!

 $ git commit -a

#ref(03.png)

コミットを他のブランチにまとめる手順は
[[GitHubでコミットをまとめる>GitHub/コミットをまとめる]] に整理してあります。

そしてリモートの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_#50にdevの直近の修正をマージして((rebaseがいいらしいって話があるけどまだ未調査))プルリクエストが望ましい。。

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

 git branch dev_#50
 git merge dev
こうやって、devでのコミットをdev_#50へ反映させます。このマージのイメージは、[[GitHub/基本]]に整理済みです。
 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;}


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