remote / push / pull — ローカルと GitHub を同期する
学習目標
このレッスンを終えると、次のことができるようになります。
originの正体と remote の概念を説明できるpush/fetch/pullの違いを表で説明できる- SSH 鍵を使った GitHub 認証を 1 度だけ設定できる
remote とは
remote (リモート) = ローカルのリポジトリと同期する別の場所にあるリポジトリの名前付きエイリアス。
GitHub の URL https://github.com/compassdata/ailms.git を origin というニックネームで覚えておくと、毎回 URL を打たずに済む。
git remote -v
# origin git@github.com:compassdata/ailms.git (fetch)
# origin git@github.com:compassdata/ailms.git (push)
clone した時に自動で origin が設定される。
flowchart LR
L[ローカル<br/>~/git/ailms/] -.origin.- R[リモート<br/>github.com/compassdata/ailms]
L --> P[git push origin main<br/>送る]
R --> F[git fetch origin<br/>取り寄せる 統合せず]
R --> PU[git pull origin main<br/>取り寄せ + 統合]
push — ローカルの commit をリモートへ送る
git push origin feature/login
# = 「origin リモートの feature/login ブランチに、ローカルの同名ブランチを送る」
初回 push (まだリモートにブランチがない時):
git push -u origin feature/login
# -u (--set-upstream): 以降は `git push` だけで OK になる追跡設定
push が拒否される代表的なケース
! [rejected] feature/login -> feature/login (non-fast-forward)
error: failed to push some refs to 'origin'
意味: リモートに自分が知らない commitが乗っている (他の人 / 他の端末が先に push 済)。
対処:
git fetch origin # リモートの最新を取り寄せる
git rebase origin/feature/login # 自分の commit をその上に積み直す
git push # 改めて push
git push --force は最後の手段。他人が同じブランチを参照していると履歴が壊れる。
fetch — 取り寄せるだけ (統合しない)
git fetch origin
リモートで起きた変更をローカルに取り寄せるだけで、現在のブランチには影響しない。
git log origin/main などでリモートの状態を確認してから、後で merge するか rebase するか決められる。安全第一なら fetch を使う。
pull — 取り寄せ + 自動 merge
git pull origin main
# = git fetch origin + git merge origin/main を一発でやる
pull の正体は fetch + merge の合成。便利だが、知らないうちに merge commit が増えるので、ailms では:
git config --global pull.rebase true
# → pull が fetch + rebase に切り替わる (履歴が綺麗になる)
SSH 鍵での GitHub 認証 (1 度きりの設定)
毎回パスワードを打たないため、公開鍵認証 (SSH key) を設定する。
1. 鍵を作る
ssh-keygen -t ed25519 -C "your-email@example.com"
# → 質問はすべて Enter で OK
# → ~/.ssh/id_ed25519 (秘密鍵) と id_ed25519.pub (公開鍵) が作られる
2. 公開鍵を GitHub に登録
cat ~/.ssh/id_ed25519.pub
# 出力をコピー → GitHub の Settings → SSH and GPG keys → New SSH key に貼る
3. 動作確認
ssh -T git@github.com
# → "Hi <your-username>! You've successfully authenticated..." が出れば成功
4. リモート URL を SSH 形式に変更 (HTTPS の clone を SSH に切替)
git remote set-url origin git@github.com:compassdata/ailms.git
以後、push / pull でパスワード入力不要。Mac の場合は鍵を keychain に登録しておくとパスフレーズ入力も不要。
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
push / fetch / pull 比較表
| コマンド | 方向 | 統合の有無 | 推奨度 |
|---|---|---|---|
git push origin <branch> |
ローカル → リモート | リモート側で fast-forward / 拒否 | 必須 |
git fetch origin |
リモート → ローカル (取り寄せのみ) | しない | 安全 |
git pull origin <branch> |
リモート → ローカル + 統合 | merge または rebase | 便利だが要設定 |
git push --force |
ローカル → リモート (強制) | 履歴を上書き | 危険・最終手段 |
振り返り
originは GitHub URL のニックネーム。cloneで自動設定される- push = 送る、fetch = 取り寄せるだけ、pull = 取り寄せ + 統合
- 拒否されたら
fetch → rebase → pushの安全手順。--forceは最後の手段 - SSH 鍵を 1 度設定すればパスワード入力不要
次のレッスンでは、変更を他人にレビューしてもらう Pull Request を学びます。
参考リンク
- GitHub Docs「SSH の使い方」: https://docs.github.com/ja/authentication/connecting-to-github-with-ssh
- Pro Git「リモート」: https://git-scm.com/book/ja/v2/Git-の基本-リモートでの作業
全 14 レッスンを、登録なしで無料で読めます。