メインコンテンツへスキップ
レッスン 11 / 15推定時間: 25

プッシュとプル(git push/pull)

コマンド一つで簡単に同期!手動でファイルをアップロード/ダウンロードする面倒から解放されましょう

このレッスンの学習目標

  • 手動でのファイル転送の問題を理解する
  • pushとpullの概念を理解する
  • 常に最新状態を保つ方法を習得する

困りごと:手動でのファイル転送は面倒で危険

😩 こんな苦労していませんか?

  • 「ファイルをZIPにして、メールで送って、解凍して...面倒!」
  • 「FTPでアップロードしたけど、どのファイルを更新したっけ?」
  • 「同期漏れで古いバージョンで作業してしまった」
  • 「チームメンバーの変更を取り込み忘れた」

解決策:git push/pullで自動同期!

Push と Pull の概念

イメージ:エレベーターのボタン

    ローカル              リモート
     (あなたのPC)          (GitHub)
        
    [↑ PUSH]    変更を送る    ☁️
                 =========>     
                              
    [↓ PULL]    変更を受け取る  ☁️
                 <=========
  • Push(プッシュ): ローカルの変更をリモートに送る
  • Pull(プル): リモートの変更をローカルに取り込む

実践:初めてのPush

1. プロジェクトの準備

# 新しいプロジェクトを作成
mkdir push-pull-practice
cd push-pull-practice
git init

# ファイルを作成してコミット
echo "# Push/Pull練習" > README.md
echo "console.log('Hello from local');" > app.js

git add .
git commit -m "初期コミット:プロジェクトをセットアップ"

2. リモートリポジトリを設定

GitHubで新しいリポジトリpush-pull-practiceを作成した後:

# リモートを追加
git remote add origin git@github.com:your-username/push-pull-practice.git

# 確認
git remote -v

3. 初めてのPush

# mainブランチにプッシュ
git push -u origin main

-uオプションは「上流ブランチ」を設定します。次回からgit pushだけでOK!

4. GitHubで確認

ブラウザでGitHubのリポジトリページを開くと、ファイルがアップロードされています!

Pullで変更を取り込む

シナリオ:別のPCから変更

# 別のディレクトリで同じリポジトリをクローン(別PCのシミュレーション)
cd ..
git clone git@github.com:your-username/push-pull-practice.git push-pull-practice-2
cd push-pull-practice-2

# ファイルを変更
echo "console.log('Hello from another PC');" >> app.js
git add app.js
git commit -m "別のPCから:メッセージを追加"
git push

元のディレクトリでPull

# 元のディレクトリに戻る
cd ../push-pull-practice

# リモートの変更を確認
git fetch
git status

# 変更を取り込む
git pull

# ファイルが更新されたことを確認
cat app.js

Push/Pullの詳細オプション

特定のブランチにPush

# 新しいブランチを作成
git checkout -b feature/new-feature

# 変更を加える
echo "// 新機能" >> app.js
git add app.js
git commit -m "feat: 新機能を追加"

# 新しいブランチをリモートにプッシュ
git push -u origin feature/new-feature

強制Push(危険!)

# 通常は使わない!履歴を書き換える時のみ
# git push --force

# より安全な強制プッシュ
# git push --force-with-lease

⚠️ 強制Pushは他の人の作業を消す可能性があるので、基本的に使わない!

よくあるエラーと対処法

エラー1:Push rejected

! [rejected]        main -> main (non-fast-forward)

原因: リモートに自分が持っていない変更がある

解決策:

# まずpullして最新を取得
git pull

# コンフリクトがあれば解決
# その後、再度push
git push

エラー2:No upstream branch

fatal: The current branch feature has no upstream branch.

解決策:

# 上流ブランチを設定してプッシュ
git push -u origin feature

エラー3:Authentication failed

解決策:

# SSH接続を確認
ssh -T git@github.com

# HTTPSからSSHに変更
git remote set-url origin git@github.com:username/repo.git

実践的なワークフロー

毎日の作業フロー

# 1. 作業開始前に最新を取得
git pull

# 2. 作業する
echo "今日の作業" >> work.txt
git add work.txt
git commit -m "feat: 今日の作業を完了"

# 3. 作業終了時にプッシュ
git push

# 4. 状態を確認
git status
git log --oneline -5

チーム開発のベストプラクティス

  1. 朝一でPull

    git pull
  2. こまめにCommit

    git add .
    git commit -m "feat: 機能Aを実装"
  3. 作業終了前にPush

    git push
  4. 帰宅前に必ずPush

    • 翌日別のPCで作業できる
    • バックアップになる

fetchとpullの違い

fetch:変更を確認するだけ

# リモートの情報を取得(ローカルは変更しない)
git fetch

# 何が変更されたか確認
git log HEAD..origin/main --oneline

# 差分を確認
git diff HEAD origin/main

pull:fetchして自動的にmerge

# fetch + merge を一度に実行
git pull

# 上記は以下と同じ
git fetch
git merge origin/main

プルリクエスト(PR)への準備

GitHubでの共同作業では、直接pushせずにプルリクエストを使うことが多い:

# フィーチャーブランチで作業
git checkout -b feature/add-login

# 変更を加える
echo "// ログイン機能" > login.js
git add login.js
git commit -m "feat: ログイン機能を追加"

# フィーチャーブランチをプッシュ
git push -u origin feature/add-login

# この後、GitHubでプルリクエストを作成

トラブルシューティング

Q: pushできない(403エラー)

A: HTTPS接続でトークンの期限切れかも

# SSHに切り替える
git remote set-url origin git@github.com:username/repo.git

Q: pullしたらコンフリクトが発生

A: 次のレッスンで詳しく学びますが、基本は:

  1. コンフリクトしたファイルを開く
  2. 手動で修正
  3. git addしてgit commit

Q: 間違えてpushしてしまった

A: チームに相談!勝手にforce pushしない

まとめ

Push/Pullの使い方をマスターしました!

  • git pushでローカルの変更をリモートに送信
  • git pullでリモートの変更をローカルに取得
  • ✅ 手動でのファイル転送が不要に
  • ✅ 常に最新の状態で作業できる

重要な習慣

  1. 作業開始時にgit pull
  2. 作業終了時にgit push
  3. こまめにgit statusで確認

次のレッスンでは、複数人での作業に欠かせない「ブランチ」について学びます!

【実践演習】Push/Pullの操作

実際にプロジェクトを作成して、Push/Pullの操作を練習しましょう。

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

練習課題

  1. GitHubでリポジトリを作成してPush

    • push-pull-testという名前でリポジトリを作成
    • リモートを追加して初回プッシュ
  2. 別ディレクトリからクローンして変更

    cd ..
    git clone git@github.com:your-username/push-pull-test.git push-pull-test-2
    cd push-pull-test-2
    
    # ファイルを編集してプッシュ
    echo "const version = '1.0.1';" > config.js
    git add config.js
    git commit -m "chore: バージョンを更新"
    git push
  3. 元のディレクトリでPull

    cd ../push-pull-test
    git pull
    cat config.js  # バージョンが更新されていることを確認
  4. FetchとPullの違いを確認

    • 再度別ディレクトリで変更を加える
    • 元のディレクトリでgit fetchして差分を確認
    • git pullで実際にマージ
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

🎯 確認ポイント

  • git pushでローカルの変更をGitHubに送信できた
  • git pullでリモートの変更を取り込めた
  • git fetchgit pullの違いを理解した
  • 複数の環境で同期を取る方法を習得した

これらの操作に慣れれば、どこからでも効率的に作業できるようになります!

さらに学習を続けるには

素晴らしい学習ペースです!次のレッスンに進むには、無料会員登録をお願いします。無料会員では各コース3レッスンまで学習できます。

無料で続きを学ぶ

各コース3レッスンまで学習可能

学習進捗の自動保存

コース修了証明書の発行