Github(Git)の各機能を理解するための図解
Github(Git)の各機能を理解するための入門編として、それぞれ簡単な図を書いて使い方を説明してみます。
まずはじめにGithub の リモートリポジトリ に以下のようにmaster、hoge1、hoge2というブランチがあるとします。
Github | |
---|---|
リモートリポジトリ | |
master | |
hoge1 | |
hoge2 |
クローン(Clone)
Github | |
---|---|
リモートリポジトリ | |
master | |
hoge1 | |
hoge2 |
↓ クローン(Clone)する
自分のPC | |
---|---|
ローカルリポジトリ | |
リモートブランチ | ローカルブランチ |
master | master |
hoge1 | |
hoge2 |
クローン(Clone)すると自分のPCにローカルリポジトリが作成され、
リポジトリ内にリモートブランチ、ローカルブランチというグループが出来ます。
リモートブランチにはリモートリポジトリにあったブランチが全て作成され、
ローカルブランチにはリモートリポジトリにあったmasterが作成されます。
ブランチの作成
ブランチはローカルリポジトリの中にあるブランチならどこからでも作成できます。
例えばリモートブランチのmasterから認証機能を実装するためのadd_authというローカルブランチを作成したとします。
自分のPC | ||
---|---|---|
ローカルリポジトリ | ||
リモートブランチ | ローカルブランチ | |
master | ┐ | master |
hoge1 | └→ | * add_auth |
hoge2 |
ブランチの移動
Gitではローカルブランチを切り替えることで、作業をする環境を切り替えます。
ユーザ一覧画面を作成するためのローカルブランチを作成したとします。
自分のPC | ||
---|---|---|
ローカルリポジトリ | ||
リモートブランチ | ローカルブランチ | |
master | ┐ | master |
hoge1 | │ | add_auth |
hoge2 | └→ | * user_list |
* の付いた場所が現在の位置で、add_authのソースコードを修正したい場合はadd_authブランチに移動します。
そうするとソースコードがadd_authのものに切り替わります。
自分のPC | ||
---|---|---|
ローカルリポジトリ | ||
リモートブランチ | ローカルブランチ | |
master | master | |
hoge1 | ┌→ | * add_auth |
hoge2 | └─ | user_list |
このローカルブランチの移動をGitではチェックアウト(checkout)と呼びます。 ※Subversion(SVN)を知っている方だとこのあたり少し違和感があります
プッシュ(Push)
|
←┐ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ─┘ |
||||||||||||
|
プッシュ(Push)とは、修正を施したローカルブランチをリモートリポジトリへ送ることです。
プルリクエスト(Pull request)
プルリクエストとは、Github上でソースコードのレビュー(&マージ)依頼をすることです。
Github | ||
---|---|---|
リモートリポジトリ | プルリクエスト | |
master | ←┐ | add_authからmasterへのマージをするプルリクエスト |
hoge1 | ↑ | |
hoge2 | ↑ | |
add_auth | ─┘ |
プルリクエストを出したあとにレビューを依頼して、依頼された人はGithub上でソースコードの差分を確認します。 問題があれば差し戻し、問題がなければそのままマージしたり(依頼者に戻してマージを促したり)します。
フェッチ(Fetch)
フェッチ(Fetch)とは、リモートリポジトリの最新をローカルリポジトリのリモートリポジトリに反映することです。
master、hoge1、hoge2の最新ソースと、先程プッシュ(Push)したadd_authがローカルリポジトリのリモートブランチへ反映されます。
┌─ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ └→ |
|
||||||||||||||
|
マージ(Merge)
マージ(Merge)とは、他のブランチに加えられた変更をローカルブランチへ反映させることです。
先程、フェッチ(Fetch)をしたので最新のソースコードがローカルリポジトリのリモートブランチに反映されています。
例えば、最新のmasterブランチのソースコードをローカルブランチのadd_authへ反映させたい場合は以下のようにマージします。
自分のPC | ||
---|---|---|
ローカルリポジトリ | ||
リモートブランチ | ローカルブランチ | |
master | ┐ | master |
hoge1 | └→ | * add_auth |
hoge2 | user_list | |
add_auth |
プル(Pull)
プル(Pull)とは、フェッチ(Fetch)を行ったあとにマージ(Merge)を行う手順を1つにしたものです。
┌─ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ └→ |
|
||||||||||||||||||||
|
スタッシュ(Stash)
ローカルブランチで開発をしていると開発途中で別のブランチへ移動したいことが度々あるかと思います。
その際、コミットしてから別ブランチへ移動するのがGitの流儀のようなのですが、コミットしたくない場合はスタッシュ(Stash)を使います。
以下、add_authで修正中のソースコードをスタッシュ(Stash)すると、スタッシュに修正中の内容が移動し、ローカルブランチでは変更ファイルがない状態になります。
自分のPC | |||
---|---|---|---|
ローカルリポジトリ | |||
リモートブランチ | ローカルブランチ | スタッシュ | |
master | master | ┌→ | edit_add_auth |
hoge1 | * add_auth | ┘ | |
hoge2 | user_list | ||
add_auth |
アンスタッシュ(UnStash)
アンスタッシュ(UnStash)とは、スタッシュに保持したファイルをローカルブランチへ戻したい場合に使います。
自分のPC | |||
---|---|---|---|
ローカルリポジトリ | |||
リモートブランチ | ローカルブランチ | スタッシュ | |
master | master | ┌ | edit_add_auth |
hoge1 | * add_auth | ←┘ | |
hoge2 | user_list | ||
add_auth |
フォーク(Fork)
フォーク(Fork)とは、リモートリポジトリを自分のアカウントのリモートリポジトリとして複製することです。
Github | ||
---|---|---|
リモートリポジトリ | → | 自分のアカウントのリモートリポジトリ |
master | master | |
hoge1 | hoge1 | |
hoge2 | hoge2 |
フォーク(Fork)を使う場合は、フォークした自分のアカウントのリモートリポジトリからクローン(Clone)し、自分のアカウントのリモートリポジトリへプッシュ(Push)して、そこからフォーク元のリモートリポジトリへマージするプルリクエストを出すことになります。
|
||||||||||||||||||
↑↓ | ||||||||||||||||||
|
コミット(Commit)
そもそもコミットの説明をしていませんでしたが、コミット(Commit)とは現在のローカルブランチへ修正を反映させることです。
例えば以下のようにuser_listブランチへ
2018/04/01 12:00:00 に 「基礎機能の追加」 をコミットし、
2018/04/02 12:00:00 に 「機能Aの追加」 をコミットし、
2018/04/03 12:00:00 に 「機能Bの追加」 をコミットし、
2018/04/04 12:00:00 に 「機能Cの追加」 をコミットしたとします。
すると以下のようにuser_listブランチのコミットログへ追加されます。
自分のPC | ||
---|---|---|
ローカルリポジトリ | ||
リモートブランチ | ローカルブランチ | コミットログ |
master | master | |
hoge1 | add_auth | |
hoge2 | * user_list |
2018/04/04 12:00:00 - 機能Cの追加 2018/04/03 12:00:00 - 機能Bの追加 2018/04/02 12:00:00 - 機能Aの追加 2018/04/01 12:00:00 - 基礎機能の追加 : |
add_auth |
リバート(Revert)
リバート(Revert)とは、既にコミットした内容を戻したい場合に使用します。
例えば先程追加したコミットログで機能Bの修正を戻したい場合に使用し、元に戻した修正として新たにコミットし、コミットログへ追加されます。
自分のPC | ||
---|---|---|
ローカルリポジトリ | ||
リモートブランチ | ローカルブランチ | コミットログ |
master | master | |
hoge1 | add_auth | |
hoge2 | * user_list |
2018/04/05 12:00:00 - Revert 機能Bの追加 2018/04/04 12:00:00 - 機能Cの追加 2018/04/03 12:00:00 - 機能Bの追加 2018/04/02 12:00:00 - 機能Aの追加 2018/04/01 12:00:00 - 基礎機能の追加 : |
add_auth |
リセット(Reset)
リセット(Reset)とは、特定のコミットのタイミングまで遡りたい際に使用します。
例えば先程のコミットログで、「機能Aの追加」をコミットしたタイミングに遡りたい場合は、リセット(Reset)を使用してそのタイミングまで遡ったソースコードに戻すことが出来ます。
自分のPC | ||
---|---|---|
ローカルリポジトリ | ||
リモートブランチ | ローカルブランチ | コミットログ |
master | master | |
hoge1 | add_auth | |
hoge2 | * user_list |
2018/04/02 12:00:00 - 機能Aの追加 2018/04/01 12:00:00 - 基礎機能の追加 : |
add_auth |
チェリーピック(Cherry Pick)
チェリーピック(Cherry Pick)とは、別のブランチへコミットされている内容を今いるローカルブランチへ反映させることです。
例えばリモートブランチのmasterからuser_list_newブランチを新たに作成し、
user_listブランチから「基礎機能の追加」をチェリーピック(Cherry Pick)してコミットすると以下のようにuser_list_newブランチへ別のブランチからコミットを移すことが出来ます。
|
─┐ ↓ ↓ ←┘ |
リベース(Rebase)
リベース(Rebase)とは、コミットした内容を変更したり、コミット順を入れ替えたり、複数のコミットを1つにまとめたりすることです。
要はコミットの整理整頓をすること。
自分がよく使うのは、コミットメッセージの修正や、細かくコミットしていた複数のコミットを1つにまとめる際に使います。
GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)
- 作者: 大塚弘記
- 出版社/メーカー: 技術評論社
- 発売日: 2014/03/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (23件) を見る
- 作者: 岡本隆史,武田健太郎,相良幸範
- 出版社/メーカー: 技術評論社
- 発売日: 2016/12/01
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
わかばちゃんと学ぶ Git使い方入門〈GitHub、Bitbucket、SourceTree〉
- 作者: 湊川あい,DQNEO
- 出版社/メーカー: シーアンドアール研究所
- 発売日: 2017/04/21
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る