超簡単!
git入門
(用語編)
2 0 2 1 . 5 .
た に や ん
OSSPlaza.com
0. GITとは
gitは「ギット」または「ジット」と呼ばれる、
一種の文書データベース
です。「版(バージョン)を管理」しているので、
「バージョン管理システム」とも呼ばれます。
バージョン管理については別のスライドがあるので、そちらを参考にしてくださ
い。gitのソフトウェアはオープンソースとなっており、一プロジェクトとして公開
されて開発されています。なるべく実機で動作を確認するようにしています。
その際、Windows環境、TortoiseGitを使用しています。
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D . 2
OSSPlaza.com
1. 本スライドで説明すること
これからはじめてgitを使う方が、管理者や他のユーザとgit
についての会話ができる、ようになることが目標です。
git(ギット)を使用するに当たって必要となる、
・基本的な構成・動作と用語
を説明します。デモはありません。
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D . 3
OSSPlaza.com
2. はじめに
2.1 操作は手動
一種のバックアップツールですが、「自動」ではしてくれません。
なぜなら、「ここまでの状況で一区切りとする」「この修正をひとつの単位とする」と明示的に指
定して保存するためです。
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D . 4
あるファイル
仮完成 完成
中身をタイプ。
一旦入力済
み。
空のファイルを
作る
その後、タイプ
ミスを見つけた
ので修正する
最後に見直し
て、少し直し
て上司に見て
もらう。
上司の指摘を
反映して完成
とする。
ある時点に戻す、事情がある際、「どの時点」を明確に指定できなければい
けない。「作業の区切り」を明確にして保存する事が重要。
2. はじめに
2.2 分散型です
履歴情報が1箇所のサーバで管理される集中型とは違い、Gitは「分散型」です。つまり、履
歴データが複数の場所(関係者各人のPCにも)分散する、ということです。これは、各人は自
分の持っている履歴情報を自分の裁量で操作管理できる自由がある、という一方で、履歴
情報間の整合性を合わせる必要があって、複雑になっている、ということでもあります。
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D . 5
時々同期さ
せる
最初は、共用のリポジトリをコピーしてくる。一種の親子関係である。
ただ、子の独立性が強く、子は子で管理できる部分が大きい。
そのため、皆で共用サーバーとは節目節目で同期しなければならない。
2. はじめに
2.3 GUIクライアント
Gitはコマンドラインを使って操作するように作られていますが、それだと不便なのでマウスで使え
るGUIツールが色々でています。「いろいろでている」ということは、個々人異なるものを使ってい
る可能性があり、(細かい操作ではなく)「共通的な知識」をちゃんと押さえておく事が重要だ、
ということです。
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D . 6
*スクリーンは転載
git-cola
SourceTree
TortoiseGit
GitHub Desktop
http://www.git-scm.com/downloads/guis
3. リポジトリとブランチ
「リポジトリ」は、通常「あるプロジェクト」単位に作成する、履歴情報データのデータベースのよ
うなものです。そのプロジェクトに関するフォルダ構造やファイル、及びそれらの全履歴情報が
入っているというものです。
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D . 7
ところで、開発は一直線では進まず、枝分かれする事が多くあります。変更履歴も枝分かれに
応じて管理しますが、そのひとつひとつの枝を「ブランチ」と呼んでいます。元々は同じフォルダや
ファイルで、異なる変更を施して管理するものです。Gitでは、通常「ブランチ」というと、その枝の
最新の状態のことを表します。
ひとつのリポジトリの中に、ブランチがいくつもあります。Gitの操作には、リポジトリに対して行うも
のと、ブランチに対して行うものがあります。
変更
履歴
リポジトリ
リポジトリ
ブランチ
ブランチを
作る
ブランチA
ブランチB
4. 共用、リモート、ローカル
リポジトリは、自分のPCの中にある「ローカル・リポジトリ」と、サーバに置いて皆で共有する「共
用(リモート)リポジトリ、がある。多くの操作がリポジトリ全体というよりもブランチに対する操作
であることから、その際はローカル・ブランチ/リモート・ブランチと呼称します。
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D .
8
リモート・リポジトリ
リモート・ブランチ
ローカル・リポジトリ
ローカル・ブランチ
*チームで共有しているの
で「共用リポジトリ」とも
5. 作業ツリーとチェックアウト
リポジトリの中、に(複数の)ブランチが収納されていますが、直接はさわれません。「チェックアウ
ト(切り替え)」という操作をして、(ローカル)リポジトリの中からブランチを引き出して、作業する
ブランチに切り替えます。引出されたものは、作業ツリー(ワーキング・ツリー)、と言って、通常の
OSのフォルダやファイルになりますが、Gitの管理下にあります。編集作業はこの作業ツリーの中
のフォルダやファイルに対しておこないます。
通常、共用リポジトリは作業ツリーを持たず、「ベア・リポジトリ」と呼ばれています。
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D .
9
ローカル・リポジトリ
ローカル・ブランチ
作業ツリー
ブランチのひとつを
チェックアウト(切り
替え)する
repo01
folder1 folder2 .git
ローカルリポジトリは任
意のフォルダ下(e.g. デ
スクトップ)。中身が作
業ツリーとリポジトリに分
かれる
隠しフォルダ
下がリポジト
リ
チェックアウトされた作
業ツリー
ブランチA
ブランチB
6. クローン
プロジェクトに参加した田中氏、マネージャーから「サーバのリポジトリをクローン」するように言わ
れました。
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D . 10
サーバ クローン:
ローカル・リポジトリ
を作成し、そこにリ
モート・リポジトリを
(過去の歴史も含
めて)コピーすること。
田中さん
repo01
repo01
クローンしてくると、通常はデフォ
ルトのブランチが作業ツリーとし
てチェックアウトされる
ローカル・リポジトリ 作業ツリー
リモート・リポジトリ
ブランチA
ブランチB
ブランチA
7. チェックアウト
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D . 11
担当している作業が作業ツリーにチェックアウトされている場合、そのまま作業できます。が、
違っている場合、対象のブランチをチェックアウト(切り替え)します。
サーバ
田中さん
repo01
repo01
もともとブランチAが作業ツリーに
あったとすると、ブランチBに「切り
替える」(スイッチする)
ローカル・リポジトリ 作業ツリー
リモート・リポジトリ
ブランチA
ブランチA ブランチB
ブランチB
8. ステージング、コミット、プッシュ
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D . 12
ファイルを新しく作ったり、エディタなどでファイルを修正して保存しても、まだ、リポジトリには登
録しません。まずは「ステージング(追加)」をして、次の「コミット(リポジトリ更新)」対象に含め
ます。その後、対象が揃ったところで「コミット」します。(ステージングの操作自体は省略すること
も多い(ステージングとコミットを一緒やる。ただし新規ファイルなどはステージングしないとGitの
管理下にならない))
コミットはローカル・ブランチを更新するのみです。共用リポジトリにあるリモート・ブランチを更新
するには「プッシュ」をします。
サーバ
田中さん
repo01
repo01
①変更したファイルをス
テージング(追加)する
ローカル・リポジトリ 作業ツリー
リモート・リポジトリ
ブランチA
ブランチB
ブランチB
8. ステージング、コミット、プッシュ
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D . 13
ファイルを新しく作ったり、エディタなどでファイルを修正して保存しても、まだ、リポジトリには登
録しません。まずは「ステージング(追加)」をして、次の「コミット(リポジトリ更新)」対象に含め
ます。その後、対象が揃ったところで「コミット」します。(ステージングの操作自体は省略すること
も多い(ステージングとコミットを一緒やる。ただし新規ファイルなどはステージングしないとGitの
管理下にならない))
コミットはローカル・ブランチを更新するのみです。共用リポジトリにあるリモート・ブランチを更新
するには「プッシュ」をします。
サーバ
田中さん
repo01
repo01
②コミット
ローカルリポジトリに反
映され、履歴が残る
ローカル・リポジトリ 作業ツリー
リモート・リポジトリ
ブランチA
ブランチB
ブランチB
コミットには「コミット・メッ
セージ」(コメント)を付け、
コミットIDが振られる
8. ステージング、コミット、プッシュ
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D . 14
ファイルを新しく作ったり、エディタなどでファイルを修正して保存しても、まだ、リポジトリには登
録しません。まずは「ステージング(追加)」をして、次の「コミット(リポジトリ更新)」対象に含め
ます。その後、対象が揃ったところで「コミット」します。(ステージングの操作自体は省略すること
も多い(ステージングとコミットを一緒やる。ただし新規ファイルなどはステージングしないとGitの
管理下にならない))
コミットはローカル・ブランチを更新するのみです。共用リポジトリにあるリモート・ブランチを更新
するには「プッシュ」をします。
サーバ
田中さん
repo01
repo01
③プッシュ
リモート・ブランチへ反映
ローカル・リポジトリ 作業ツリー
リモート・リポジトリ
ブランチA
ブランチB
ブランチB
9. タグ
タグは、コミットにつける「目印」。
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D . 15
2.0
1.0 1.1
タグ
キリの良いコミットに目印をつ
けることで、後で探しやすくす
る。コミットした後に、コミットに
対して付与する。
10. フェッチ
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D . 16
共用リポジトリ時にある、他の人の変更を取り込みましょう。他の人の変更クローンが、リポジト
リ全体をコピーしてくる事に対して、フェッチは「リモート・ブランチ」をローカルのリポジトリに取り込
むことをいいます。フェッチしただけではローカル・ブランチにまでは統合されず、「リモート追跡ブ
ランチ」という特殊なブランチとして持ちます。
サーバ
田中さん
repo01
repo01
フェッチ
リモート・ブランチAをローカルのリ
モート追跡ブランチとして取得
ローカル・リポジトリ 作業ツリー
リモート・リポジトリ
ブランチA
ブランチA
ブランチB
ブランチAのリモート
追跡ブランチ
ブランチA
山本さん
11. マージ
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D . 17
ブランチを統合する(2つのブランチの差を統合して一つのブランチのまとめる)作業を、マージ、
と言います。ここでは、リモート追跡ブランチをローカル・ブランチに統合します。自動でマージで
きる場合(オートマージ)と、手動で行う場合があります。
サーバ
田中さん
repo01
repo01
マージ
ブランチAのリモート追跡ブラン
チをローカル・ブランチに統合、
作業ツリーにも。
ローカル・リポジトリ 作業ツリー
リモート・リポジトリ
ブランチA
ブランチA
ブランチB
12. プル
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D . 18
プル、は、先程のフェッチとマージを一度に行うものです。
サーバ
田中さん
repo01
repo01
プル
フェッチー>マージの組み合
わせ
ローカル・リポジトリ 作業ツリー
リモート・リポジトリ
ブランチA
ブランチA
ブランチB
13.ブランチ、マスターブランチ、HEAD
開発していると、「枝分かれ」していくことがあります。この「枝」を「ブランチ」といいます。枝全体
ではなく、枝の最新のものをいいます。
デフォルトで一つ設定されており、これを「マスター・ブランチ」と言います。 (Subversionのトラン
クに近い)
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D . 19
1.0 1.1 1.2
2.0 2.1
Masterブランチ
Releaseブランチ
Masterの1.1を元にして作った
Releaseブランチ
現在チェックアウトしている作業
ツリー”HEAD”
HEAD
Public class Main {
public static void printArray (int[] array) {
for (int element : array ) {
System.out.println (element) :
}
}
public static void main (String [] args) {
int [] array = { } :
printArray (array);
}
}
14. コンフリクト(競合)とマージ
2つのブランチの間で、一方の変更を他方にも取り込みたい場合に「マージ」します。プッシュ、
プルなどの操作の際にも起こります。同じテキストファイル中でも、離れた箇所であればマージ
すれば自動的に統合されます(オートマージ)。
が、同じファイルの同じ行に異なる修正を施した場合、そのままでは共存できない状態となりま
す。この状態が「コンフリクト(競合)」です。コンフリクトが発生した場合は、ツールを使って手動
で修正して解消します。自分のローカルにリモートの修正を取り込んでコミットします。
勝手に修正するのではなく、競合する相手の了解を得ること!が重要です。
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D . 20
Public class Main {
public static void printArray (int[] array) {
for (int element : array ) {
System.out.println (element) :
}
}
public static void main (String [] args) {
int [] array = { 3, 4, 5 } :
printArray (array);
}
}
Public class Main {
public static void printArray (int[] array) {
for (int element : array ) {
System.out.println (element) :
}
}
public static void main (String [] args) {
int [] array = { 1, 2,3 } :
printArray (array);
}
}
元のファイル
田中さん
の修正
山本さん
の修正
コンフリクト(競合)
同じ場所を直した場合、修正が競合す
る。田中さんと山本さんは話し合って、
手修正してコミット・マージする。
オートマージ
修正場所が離れている場合は、自動で
マージしてくれる。
15.スタッシュ(STASH)
スタッシュ(Stash)は、作業ツリーで作業中の状態を「棚上げ」しておく機能。
例えば、作業ツリーで変更作業中、割り込みで別の変更作業が入ったとします。その間、元
の変更中の作業をスタッシュ・退避しておき、割り込み作業が終わったら戻して作業を続けま
す。
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D . 21
1. 作業中に、割り込みの
修正依頼 が発生する。
作業ツリー
2. をスタッシュで退避し、
の修正を行いコミットす
る。
3. をスタッシュから戻して
作業する。
スタッシュ
16. リセット、リバート
リセット
変更を取り消す。基本的にはやらない。リポジトリ間の整合を取るのが難しい。
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D . 22
リバート(Revert, コミットの変更を戻す、打ち消し)
変更を取り消す。特定の版に「内容を」戻すが、管理上は新しいコミットになる。
このコミットへリセット その後のコミットはなかったことに。
このコミットへリバート
リバート: 新しくコミット
するが、コミット”1”の
内容に戻る。
1 2 3 4
2 3 4
1 5
17. リベース(REBASE)
リベース
枝分かれの起点を変更する。コミットをまとめる。
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D . 23
2の変更を取り込んでそこをブランチ
の起点に再設定
2)コミットをまとめる
1) 起点を変更
コミットをまとめてひとつのコミットに
1 2
2” 3” 4”
1 2
2” 3” 4”
2の変更が取り込まれているので、左
の2”, 3“, 4”とは異なる
1 2
2” 3” 4”
1 2
2” 4”
18. その他用語
コミットログ
コミットログはコミットの「履歴」。ログって多くのソフトではあまり見ることはないが、Gitは履歴を
管理しているソフトなので頻繁に参照する。
チェリーピッキング
特定のコミットの修正だけピンポイントでマージすること。
プルリクエスト
共用リポジトリにプッシュする際、他のメンバーに「プルしてください」と通知すること。Git自身の
機能ではない。
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D . 24
19. まとめ
今回は、駆け足でGitの基本的な用語と動作を説明しました。
主に使う用語は概ね網羅したかな、と思っています。
Subversionのユーザの方、同じ用語が異なる意味や動作を表しているものがありま
すので、注意してください。
説明は以上です。このスライドがGitを使い始める際の一助になれば幸いです。
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D . 25
OSSPlazaでは、お役に立ちそうな情報発信しています。
Webサイト
https://www.ossplaza.com/
Twitter
https://www.twitter.com/ossplaza
Youtube
https://www.youtube.com/
にて、”OSSちゃんねる”または”OSSplaza”を検索
Slideshare
https://www.slideshare.net/ (twitter/youtubeにリンクを貼ります)
C O P Y R I G H T ( C ) 2 0 2 0 O S S P L A Z A . C O M A L L R I G H T R E S E R V E D 26
OSSPlaza.com
OSSPlaza.com
C O P Y R I G H T ( C ) 2 0 2 0 O S S P L A Z A . C O M A L L R I G H T R E S E R V E D 27
OSSPlaza.com
OSSPlaza.com
弊社で「サーバ構築」する際、OSの準備まではお客様に用意していただくのですが、その際本
書の手順+ネットワーク設定、までをお願いしています(仮想環境はVirtualBoxではないことが
多いのでお客様にお願いしています)。
本書中に登場する会社名、製品名は各社の登録商標または商標です。本文中では
®©TMなどの記載は省略しています。
本書は、エイチスリーパートナーズ有限会社にて行なったインストールなどの結果を掲載してい
るのみであり、内容については一切保証していません。読者の責任においてご利用ください。
著作者人格権はエイチスリーパートナーズに帰属しますが、個人や社内で自由に複写して構
いません。
C O P Y R I G H T ( C ) 2 0 2 0 O S S P L A Z A . C O M A L L R I G H T R E S E R V E D 28
注意:
C O P Y R I G H T ( C ) 2 0 1 9 O S S P L A Z A . C O M A L L R I G H T
R E S E R V E D . 29

Git入門-概念編