リモートリポジトリ(GitHub)から情報を取得する~pull プル~

GitHub

リモートリポジトリ(GitHub)から情報を取得する方法についてご説明していきます。

リモートリポジトリから情報を取得するには大きく分けて下記の2種類あります。

  • fetch(フェッチ)   ⇒ 取得する
  • pull(プル)     ⇒  引き寄せる

今回はpullを利用して情報を取得する方法についてお話していきます。

fetchとpullの違い

似たような動作をするfetchとpullの違いについてご紹介

fetch

リモートリポジトリからローカルリポジトリに情報を取得するコマンド

git fetch origin main

取得した手元のワークツリーに反映させるには下記のmergeコマンドを利用する必要がある。origin/mainは取得したブランチ名を指定する。

git merge origin/main  

おまけ

取得したブランチ名がわからない場合は下記のbranchコマンドを利用すれば確認することができる。

git branch -a

-aはallの略ですべてのブランチを意味する。

$ git branch -a
* main  //*印は現在の作業ブランチ
  remotes/origin/main  //fetchで取得したブランチ
※コードの見方
黄・・・入力したコマンド
青・・・ログインユーザー
紫・・・コメント
その他・・・コマンドのレスポンス

fetchコマンドの詳細は下記を参照してください。

pull

リモートリポジトリからワークツリーに情報を取得するコマンド

git pull origin main

fetchを使用した場合の下記の2つのコマンドと同じ動作を1つのコマンドで実行できる。

git fetch origin main 
git merge origin/main  

pullの使い方

pullコマンドはリモートリポジトリ(GitHub)からローカルリポジトリに情報を取得して手元のワークツリーに反映させることができる。

基本型: git pull リモート名 ブランチ名

git pull origin main

下記のように省略も可能

git pull

pullを利用して情報を取得してみる

テスト用にリモートリポジトリにpull.htmlファイルを作成しておく。

Linuxのlsコマンドで現在のフォルダ内のファイルを確認する

$ ls
index.html  remote.html  secret.txt  style.css

pullコマンドを実行してリモートリポジトリの情報を取得する

$ git pull origin main
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 2 (delta 1), reused 0 (delta 0), pack-reused 0  
Unpacking objects: 100% (2/2), 613 bytes | 55.00 KiB/s, done.
From https://github.com/ユーザー名/リポジトリ名
 * branch            main       -> FETCH_HEAD
   cef8f1b..9613ebc  main       -> origin/main
Updating cef8f1b..9613ebc
Fast-forward
 pull.html | 1 +     //詳細①
 1 file changed, 1 insertion(+)
 create mode 100644 pull.html

詳細①
リモートリポジトリで追加されたpull.htmlファイルを取得してきたのがわかる。

Linuxのlsコマンドを実行して現在のフォルダに先ほど追加したpull.htmlファイルがあることを確認する。

$ ls
index.html  pull.html  remote.html  secret.txt  style.css

ある!

注意点

リモートリポジトリからの取得とマージまで一括でできてしまうpullコマンドは一見すると便利そうですが注意点もあります。

ワークツリーに複数の作業ブランチがある場合

自身の手元に下記二つの異なる作業ブランチがあるとします。

  • foo 現在の作業ブランチはfoo
  • bar
ライオン
ライオン

リモートリポジトリからAさんが修正したbarの情報を取得して最新の状態にbarを更新したい・・・

そんなときに下記を実行してしまうと

git pull origin bar

barのブランチを更新するのではなく現在の作業ブランチであるfooに統合される

リモートリポジトリのorigin/barからpullするとローカルブランチのbarに統合されると思ってしまうかもしれません。

ですが、実際には現在いる作業ブランチのfooに取得したbarの情報が統合されてしまいます。

実際のプロジェクトでこれを行ってしまうと大変なことになってしまいます。

ライオン
ライオン

すべてが終わった・・・

そうならないようにしっかりと注意をしてpullは利用しましょう。

どうしても不安な方はgitの操作に慣れるまではfetchを利用しても良いかもしれません。

タイトルとURLをコピーしました