困りごと:手動でのファイル転送は面倒で危険
😩 こんな苦労していませんか?
- 「ファイルを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
チーム開発のベストプラクティス
-
朝一でPull
git pull
-
こまめにCommit
git add . git commit -m "feat: 機能Aを実装"
-
作業終了前にPush
git push
-
帰宅前に必ず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: 次のレッスンで詳しく学びますが、基本は:
- コンフリクトしたファイルを開く
- 手動で修正
git add
してgit commit
Q: 間違えてpushしてしまった
A: チームに相談!勝手にforce pushしない
まとめ
Push/Pullの使い方をマスターしました!
- ✅
git push
でローカルの変更をリモートに送信 - ✅
git pull
でリモートの変更をローカルに取得 - ✅ 手動でのファイル転送が不要に
- ✅ 常に最新の状態で作業できる
重要な習慣:
- 作業開始時に
git pull
- 作業終了時に
git push
- こまめに
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
練習課題
-
GitHubでリポジトリを作成してPush
push-pull-test
という名前でリポジトリを作成- リモートを追加して初回プッシュ
-
別ディレクトリからクローンして変更
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
-
元のディレクトリでPull
cd ../push-pull-test git pull cat config.js # バージョンが更新されていることを確認
-
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 fetch
とgit pull
の違いを理解した- 複数の環境で同期を取る方法を習得した
これらの操作に慣れれば、どこからでも効率的に作業できるようになります!