ストーリー
git pullとは
git pull
は、リモートリポジトリの変更をローカルにダウンロードするコマンドです。
graph RL
subgraph RemotePull["リモート (GitHub)"]
RP3["commit3"]
RP2["commit2"]
RP1["commit1"]
end
subgraph LocalPull["ローカル"]
LP3["commit3"]
LP2["commit2"]
LP1["commit1"]
end
RemotePull -->|"git pull"| LocalPull
style LocalPull fill:#d1fae5,stroke:#059669,stroke-width:2px,color:#064e3b
style RemotePull fill:#dbeafe,stroke:#2563eb,stroke-width:2px,color:#1e40af
なぜpullが必要なのか
シナリオ1: 別のPCで作業した
会社PC GitHub 自宅PC
[commit1] →push→ [commit1] ←pull← [commit1]
[commit2] [commit2] [commit2] (新しく取得)
シナリオ2: チームメンバーが変更した
あなた GitHub 田中さん
[commit1] [commit1] ←push← [commit1]
[commit2] (田中さんの変更)
pull→ [commit2]
[commit2] (取得)
基本的な使い方
コマンド
git pull origin main
または(upstream設定済みの場合)
git pull
実際に試してみよう
GitHub上で直接ファイルを編集
pull を体験するために、GitHub上でファイルを編集してみましょう。
Step 1: GitHubでリポジトリを開く
ブラウザで https://github.com/username/my-first-repo を開きます。
Step 2: hello.txtをクリック
ファイル一覧から hello.txt をクリックします。
Step 3: 編集ボタンをクリック
ファイル表示画面の右上にある鉛筆アイコン(Edit this file)をクリックします。
Step 4: 内容を編集
Hello Git!
追加の行です
GitHubから追加した行です ← これを追加
Step 5: コミット
画面下部で:
- Commit message: 「GitHubから直接編集」
- 「Commit changes」をクリック
ローカルでpullする
Step 1: ローカルの状態を確認
cd ~/my-first-git
cat hello.txt
出力:
Hello Git!
追加の行です
まだGitHubでの変更は反映されていません。
Step 2: pullを実行
git pull
出力:
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/username/my-first-repo
abc1234..def5678 main -> origin/main
Updating abc1234..def5678
Fast-forward
hello.txt | 1 +
1 file changed, 1 insertion(+)
Step 3: 変更を確認
cat hello.txt
出力:
Hello Git!
追加の行です
GitHubから追加した行です
GitHubでの変更がローカルに反映されました!
pullの仕組み
git pull は、実際には2つの操作を同時に行っています:
git pull = git fetch + git merge
git fetch
リモートの情報を取得する(ローカルは変更しない)
git fetch origin
git merge
取得した情報をローカルにマージ(統合)する
git merge origin/main
リモートの状態を確認する
fetch して確認
git fetch origin
git log origin/main..main # ローカルにだけあるコミット
git log main..origin/main # リモートにだけあるコミット
差分を確認
git diff main origin/main
コンフリクト(競合)
コンフリクトとは
同じファイルの同じ部分を、ローカルとリモートで別々に編集した場合に発生します。
ローカル: リモート:
Hello World! Hello Git!
^^^^^^^^ ^^^^^^^
同じ行を別々に変更 → コンフリクト発生
コンフリクトの表示
git pull
出力:
CONFLICT (content): Merge conflict in hello.txt
Automatic merge failed; fix conflicts and then commit the result.
ファイルの中身
<<<<<<< HEAD
Hello World!
=======
Hello Git!
>>>>>>> origin/main
<<<<<<< HEAD: ローカルの変更=======: 区切り線>>>>>>> origin/main: リモートの変更
解決方法
- ファイルを開く
- どちらを残すか決めて編集
<<<,===,>>>の行を削除git addでステージングgit commitで確定
# ファイルを編集して解決後
git add hello.txt
git commit -m "コンフリクトを解決"
pullのオプション
rebaseオプション
git pull --rebase
通常のpull(merge)よりも履歴がきれいになります。
通常のpull: rebaseでpull:
*---* (merge) *---* (main)
/ /
*---* *---*
チームによってどちらを使うかルールがあります。
よくあるトラブル
「Your local changes would be overwritten」
error: Your local changes to the following files would be overwritten by merge:
hello.txt
Please commit your changes or stash them before you merge.
→ ローカルに未コミットの変更があります。
解決方法1: コミットする
git add .
git commit -m "作業中の変更を保存"
git pull
解決方法2: 一時退避(stash)
git stash # 変更を一時保存
git pull
git stash pop # 変更を復元
毎日のワークフロー
朝の作業開始時:
# 1. プロジェクトフォルダに移動
cd ~/my-project
# 2. 最新を取得
git pull
# 3. 作業開始!
夕方の作業終了時:
# 1. 変更をコミット
git add .
git commit -m "今日の作業"
# 2. pushして帰宅
git push
ハンズオン
以下の手順で pull を体験してください。
# 1. GitHubでhello.txtを直接編集
# (ブラウザで操作)
# 2. ローカルの状態を確認
cd ~/my-first-git
cat hello.txt
# 3. pullを実行
git pull
# 4. 変更が反映されたことを確認
cat hello.txt
# 5. 履歴を確認
git log --oneline
まとめ
| コマンド | 説明 |
|---|---|
git pull | リモートの変更を取得してマージ |
git fetch | リモートの情報を取得(マージしない) |
git pull --rebase | 取得してリベース |
pushとpullの使い分け
| 状況 | コマンド |
|---|---|
| 自分の変更をアップロードしたい | git push |
| 他人の変更をダウンロードしたい | git pull |
| 最新の状態から作業を始めたい | git pull |
チェックリスト
- GitHub上でファイルを直接編集できた
-
git pullでローカルに反映できた - コンフリクトの概念を理解した
Step 3 完了!
おめでとうございます!リモートリポジトリとの同期ができるようになりました。
習得したスキル
- リモートリポジトリの概念を理解
- GitHubアカウントの作成
- リモートリポジトリの作成
-
git remote addでリモートを登録 -
git pushで変更をアップロード -
git pullで変更をダウンロード
次のステップへ
Step 4では、変更履歴を詳しく確認する方法を学びます。
git logの詳細なオプションgit diffで変更内容を確認- 過去のコミットを調べる
Gitの本当の力を体験しましょう!
推定読了時間: 60分