10. 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
11. 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
12. 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
13. 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が振られる
14. 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
15. 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
タグ
キリの良いコミットに目印をつ
けることで、後で探しやすくす
る。コミットした後に、コミットに
対して付与する。
16. 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
山本さん
17. 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
18. 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
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 = { } :
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);
}
}
元のファイル
田中さん
の修正
山本さん
の修正
コンフリクト(競合)
同じ場所を直した場合、修正が競合す
る。田中さんと山本さんは話し合って、
手修正してコミット・マージする。
オートマージ
修正場所が離れている場合は、自動で
マージしてくれる。
22. 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
23. 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”