チーム開発に必要なGitコマンドを神速で習得しよう! 


すみません、タイトルは釣りです。書籍『入門git 』と『もっと早く知りたかった! Gitが鬼のようにわかるスライド厳選7選』、『Gitがこわくて触れられなかったけど、このスライドで理解出来るようになったよGitサイトまとめ』紹介のスライドを読んで、理解したことをまとめるためにこの記事を書きました。今までは個人でしかGitを使っていなかったので、チーム開発に必要なGitコマンドを少しでも理解できるように頑張ります!

(05/13 08:45) githelpを追加


🐞 Gitの基本的な開発スタイルについて


From イラストでわかる!git入門の入門

Gitの基本的な開発スタイルは次のとおりです。

(1) gitの開発ではローカルで使う個人リポジトリとチームで使う共有リポジトリを用いる
(2) 共有リポジトリに push すると個人リポジトリのこれまでのコミット内容を送れる
(3) pull すると共有リポジトリのコミット内容を個人リポジトリに取り込める

🍣 Gitリポジトリを作成する

ローカルに個人リポジトリを新規作成する場合は、プロジェクト直下のフォルダでGit initを実行します。また、サーバ側にリポジトリを新規作成する場合は、Git init --bareを実行します。

😼 開発の基本的な流れ



From 一人でもはじめるGitでバージョン管理

Gitを使った開発の基本的な流れは次のとおりです。

(1) 共有リポジトリからpullして個人リポジトリを最新に
(2) 個人リポジトリでソースコードを変更
(3) ファイルの追加/削除/変更をgitのインデックスに追加するために git add
(4) 変更結果を git commit で個人リポジトリにコミット
(5) 個人リポジトリをpushして共有リポジトリに反映

🗻 ブランチ・マージ・リベースの意味



Gitのブランチや、marge / rebaseコマンドについてかなり丁寧に説明をしてくれています。また、マージの際のFast Forwardの説明もわかりやすいです。コレを読んでおくと陥りがちな失敗をうまく回避できそうです!

## Gitのしくみについて

ここまでいくつかのGitコマンドを紹介しましたが、次にGit内部でどんな動きをしているかについてのスライド『いつやるの?Git入門』を紹介します。これを読んでおくと、Git内部の動きがいろいろ納得できますよ!

😸 Gitの基本コマンドを理解できるサイト

Gitのコマンドを例題を通して理解できるサイト『Learn Git Branching』の紹介です。コマンドを実行すると図が変化するなど、動きがあってわかりやすいです。

🐮 rebaseの正しい使い方

ソーシャルメディアマーケティングで有名なクロコスさんのスライド。特にrebaseを使う場合の使い方や、チーム作業で注意すべき点が書かれていて勉強になります!

🗽 A successful Git branching modelについて



From バージョン管理のワークフロー

ブランチを活用してバージョン管理を行いながら開発をするための代表的なモデル『A successful Git branching model』は次のとおりです。

* masterブランチ:安定してリリースが可能な状態を保つ
* developブランチ:最新の開発を反映する
* featureブランチ:新しい開発をするのに用いる
* releaseブランチ:リリース準備のために用いる
* hotfixブランチ:masterで致命的バグがあった場合に使用します。

featureブランチでの機能開発の流れは次のとおりです。

git checkout -b feature-x.x.x develop #=> developからfeature-x.x.xブランチを作成して移動
(feature-x.x.xの実装)
git checkout develop #=> developブランチにスイッチ
git merge --no-ff feature-x.x.x #=> developとfeature-x.x.xをマージコミットを作ってマージ
git branch -d feature-x.x.x #=> マージされたfeature-x.x.xブランチを削除
git push origin develop #=> 共有リポジトリにdevelopをpush

releaseブランチでのリリース準備作業の流れは次のとおりです。

git checkout -b release-x.x.x develop #=> developからrelease-x.x.xブランチを作成して移動
(リリースの準備作業)
git checkout master #=> masterブランチにスイッチ
git merge --no-ff release-x.x.x #=> masterとrelease-x.x.xをマージコミットを作ってマージ
git tag -a x.x.x #=> バージョン情報をタグに書く
git checkout develop #=> developブランチに移動
git merge --no-ff release-x.x.x #=> developとrelease-x.x.xをマージコミットを作ってマージ
git branch -d release-x.x.x #=> マージされたrelease-x.x.xを削除

hotfixブランチでのバグ修正作業の流れは次のとおりです。

git checkout -b hotfix-x.x.x master #=> masterからrelease-x.x.xブランチを作成して移動
(バグ修正を実施)
git commit -m “Fix a bug” #=> バグ修正をコミット
git checkout master #=> masterブランチにスイッチ
git merge --no-ff hotfix-x.x.x #=> masterとhotfix-x.x.xをマージコミットを作ってマージ
git tag -a x.x.x #=> バージョン情報をタグに書く
git checkout develop #=> ブランチdevelopにスイッチ
git merge --no-ff hotfix-x.x.x #=> developとhotfix-x.x.xをマージコミットを作ってマージ
git branch -d hotfix-x.x.x #=> ブランチhotfix-x.x.xを削除

補足として、『A successful Git branching model』のコマンド入力を簡略化するためのツールとして、git-flowがあります。もしこのモデルを踏襲したい場合はぜひ活用ください。

🎂 Gitのコマンドの習得を支援するコマンド

日本語で、Gitコマンドのhelp的な機能を提供してくれるコマンドラインツール(gem)。
まずは次のコマンドを実行してgemをインストール。

gem install githelp

実行はこんな感じ。

$ githelp README 8 比較
[0] 「README.md」ファイルを8分前のものと比較する
% git diff HEAD "@{8 minutes ago}" README.md
[1] 「README.md」ファイルを8時間前のものと比較する
% git diff HEAD "@{8 hours ago}" README.md
[2] 「README.md」ファイルを8日前のものと比較する
% git diff HEAD "@{8 days ago}" README.md

これは結構役に立ちそう。

masui/GitHelp: Gitコマンドの使いこなし支援

🐡 逆引きGit

nulabさんが作成されている『逆引きGit』は書籍になったら大ヒットしそうなレベルでまとまっていてオススメです!

🐰 本格的にGitを学ぶならPro Git

Pro Git』は本格的にGitを学ぶ手助けをしてくれるサイトです。10の言語で翻訳されているほど人気が高いコンテンツです! 英語版の書籍は約$20でアマゾンUSで販売されています!

Pro Git

🍮 マージでconflictが発生した場合の対策

marge中の2つのブランチでどちらも同じファイルを変更した場合、conflict(矛盾)が発生することがあります。『Gitでコンフリクトした時のための備忘録』にconflictが発生した場合によく使いそうなコマンドが整理されています!

また、p4margeというconflict時のツールもあります。『Gitのマージツールにp4mergeを使ってみた』にGitで利用するための手順がまとめラているのでよかったら試してみてください!

🤔 補足

pullとfetchの違い

pullコマンドでは自分のコードと他人のコードがマージされます。もしまずは取り込むだけにしたい場合は、fetchコマンドを実行します。fetch と pullの違いに簡潔な説明がありますので、こちらもオススメです!

ベアリポジトリ(Git init –bare)について



From ベアリポジトリとノンベアリポジトリ:理論編〜GitでWordPressのテーマを管理



From いつやるの?Git入門

--bareは、ベアリポジトリを作成する場合につけます。ベアリポジトリとは、更新情報だけをもつリポジトリのことでサーバの共有リポジトリの場合につけます。

🐯 参考リンク

Gitがこわくて触れられなかったけど、このスライドで理解出来るようになったよGitサイトまとめ

もっと早く知りたかった! Gitが鬼のようにわかるスライド厳選7選

🏀 変更来歴

(13/08/28 10:25) スライド『Git 7つの心構え』を追加。日本語のミスを修正

(13/08/28 12:00) Pro Gitの紹介を追加

(14/02/22 00:20) 全体的に説明をアップデート

(16/05/13 08:45) GitHelpを追加

📚 おすすめの書籍