#11 変更履歴をプルする。
次は変更履歴のプルについて見ていきます。
ローカルリポジトリとリモートリポジトリの間に変更履歴の差分がある場合、その変更履歴をローカルリポジトリへ引き込む事ができます。
【※CBC_Gitリポジトリで作業して下さい!】
①前項で作成された「study」ブランチがリモートリポジトリにアップロードされているので、チェックアウトする。

ここまでの学習で、CBC_Gitリポジトリではまだ一度もブランチを作成していませんが、
リモートリポジトリにはCBC_Git2で作成されたstudyブランチが存在します。前項でstudyブランチを作成し、変更内容をプッシュしているからです。
リモートリポジトリ上に存在するブランチは、そのリポジトリと紐付いている全てのローカルリポジトリと共有する事が可能です。
studyブランチにチェックアウトし、ローカルリポジトリへ引き込んでみましょう。

そのままチェックアウトボタンをクリックで問題ありません。
ここでは、「リモートリポジトリ上に存在する「study」ブランチをコピーしたものを、ローカルリポジトリ上に「study」という名称のブランチで作成する」という設定をしています。

CBC_Gitリポジトリ上にもstudyブランチが作成され、チェックアウトまで行いました。study.txtも最新のバージョンになっているはずです。


②studyブランチ上でテキストファイルを追記し、コミット&プッシュ
3行目を追記し、コミット&プッシュまで行いましょう。



プッシュまで完了すると、表示が下図の様になるはずです。
・sourcetree

・GitHub

【※CBC_Git2リポジトリで作業して下さい!】
ローカルリポジトリ「CBC_Git(先ほどまで作業してたリポジトリ)」からプッシュされた変更履歴を、
ローカルリポジトリ「CBC_Git2」でプルします。

CBC_Git2リポジトリ操作画面を開いた際には、上図の様な表示になっているはずです。
※この様な表示に変わらない場合は、画面上部にある「フェッチ」ボタンをクリックしてみて下さい。
「フェッチ」=リモートリポジトリ上の変更履歴の状態を確認します。確認するだけなので、変更内容は取得しません。
表示を見るとわかる通り、ローカルリポジトリとリモートリポジトリそれぞれのstudyブランチでは、変更履歴に1コミット分の差が出ています。
プルして、リモートリポジトリが保持している変更履歴を取り込みましょう。


特に設定を変更する必要はありません。
OKボタンをクリックする前に確認することは
オプションの4項目については、一番上の項目にだけチェックがついていれば大丈夫です。

ローカルリポジトリのstudyブランチと、リモートリポジトリのstudyブランチが同じ高さに表示されていますね。
つまり、現状このローカルリポジトリとリモートリポジトリのstudyブランチには差分が存在しない、という事になります。

テキストファイルの内容も、CBC_Gitリポジトリで変更したものにちゃんと変わっています。
※「プル」=「フェッチ」+「マージ」
今回学んだ「プル」という作業は、Gitというシステムから見ると、「フェッチ」と「マージ」という作業を同時に行なっている事になります。
「フェッチ」は先述した通り、リモートリポジトリ上の状態確認を行う作業です。確認を行うだけで、変更履歴自体の取得は行いません。
「マージ(=併合する、合併する)」は文字通り、変更履歴を合併し、取り込む作業です。
ローカルリポジトリ上で認識している変更履歴を選択し、その内容を取り込みことができます。
では、「プル」を実行した場合どの様な作業が行われているかと言うと、
リモートリポジトリに上がっている変更履歴を取得する際、基本的にはプルで事足りることがほとんどです。
しかし、場合によってはフェッチやマージを単体で実行するような場面もあり得るので、知識として覚えておくと良いでしょう。
ローカルリポジトリとリモートリポジトリの間に変更履歴の差分がある場合、その変更履歴をローカルリポジトリへ引き込む事ができます。
【※CBC_Gitリポジトリで作業して下さい!】
①前項で作成された「study」ブランチがリモートリポジトリにアップロードされているので、チェックアウトする。

リモートリポジトリにはCBC_Git2で作成されたstudyブランチが存在します。前項でstudyブランチを作成し、変更内容をプッシュしているからです。
リモートリポジトリ上に存在するブランチは、そのリポジトリと紐付いている全てのローカルリポジトリと共有する事が可能です。
studyブランチにチェックアウトし、ローカルリポジトリへ引き込んでみましょう。

ここでは、「リモートリポジトリ上に存在する「study」ブランチをコピーしたものを、ローカルリポジトリ上に「study」という名称のブランチで作成する」という設定をしています。



②studyブランチ上でテキストファイルを追記し、コミット&プッシュ
3行目を追記し、コミット&プッシュまで行いましょう。



プッシュまで完了すると、表示が下図の様になるはずです。
・sourcetree


【※CBC_Git2リポジトリで作業して下さい!】
ローカルリポジトリ「CBC_Git(先ほどまで作業してたリポジトリ)」からプッシュされた変更履歴を、
ローカルリポジトリ「CBC_Git2」でプルします。

※この様な表示に変わらない場合は、画面上部にある「フェッチ」ボタンをクリックしてみて下さい。
「フェッチ」=リモートリポジトリ上の変更履歴の状態を確認します。確認するだけなので、変更内容は取得しません。
表示を見るとわかる通り、ローカルリポジトリとリモートリポジトリそれぞれのstudyブランチでは、変更履歴に1コミット分の差が出ています。
プルして、リモートリポジトリが保持している変更履歴を取り込みましょう。


OKボタンをクリックする前に確認することは
- プルする元のリポジトリ:originになっていること
- プルするリモートのブランチ:studyになっていること
オプションの4項目については、一番上の項目にだけチェックがついていれば大丈夫です。

つまり、現状このローカルリポジトリとリモートリポジトリのstudyブランチには差分が存在しない、という事になります。

※「プル」=「フェッチ」+「マージ」
今回学んだ「プル」という作業は、Gitというシステムから見ると、「フェッチ」と「マージ」という作業を同時に行なっている事になります。
「フェッチ」は先述した通り、リモートリポジトリ上の状態確認を行う作業です。確認を行うだけで、変更履歴自体の取得は行いません。
「マージ(=併合する、合併する)」は文字通り、変更履歴を合併し、取り込む作業です。
ローカルリポジトリ上で認識している変更履歴を選択し、その内容を取り込みことができます。
では、「プル」を実行した場合どの様な作業が行われているかと言うと、
- 「フェッチ」を実行し、リモートリポジトリの状態確認を行う。リモートリポジトリ上でどんな変更が行われているかを取得してくる。
- 「マージ」を実行し、前段で取得したリモートリポジトリの状態から一番最新の変更履歴をマージする。
リモートリポジトリに上がっている変更履歴を取得する際、基本的にはプルで事足りることがほとんどです。
しかし、場合によってはフェッチやマージを単体で実行するような場面もあり得るので、知識として覚えておくと良いでしょう。