無料プレビュー 10 / 14

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 を学びます。

参考リンク

全 14 レッスンを、登録なしで無料で読めます。