16.

Git push 完全ガイド (リモート同期)

編集
この記事の要点
  • 基本: git push origin main でローカルのコミットをリモートに送る
  • 初回は -u origin main追跡関係を設定 → 以降は git push だけで OK
  • --all 全ブランチ / --tags タグ / --delete リモートブランチ削除
  • --force は危険、共有ブランチでは禁止。代わりに --force-with-lease
  • 認証は HTTPS(PAT)/ SSH。複数リモート (origin / upstream) を git remote -v で確認

基本: git push

ローカルブランチのコミットをリモートリポジトリに送るコマンド。チーム共有の起点になる操作です。

# リモート origin の main ブランチへ
git push origin main

# 現在のブランチを同名でリモートへ
git push origin HEAD

# 短縮形(追跡設定済なら)
git push

初回 push と追跡設定(-u)

新しいローカルブランチを初めてリモートに push するときは -u (--set-upstream) で追跡関係を作ります。以降は git push / git pull だけで動きます。

# 新ブランチ作成
git checkout -b feature/login

# 初回 push(-u で追跡設定)
git push -u origin feature/login

# 以降は省略可
git push
git pull

# 追跡設定だけ後付け
git branch --set-upstream-to=origin/feature/login

# 現在の追跡先確認
git branch -vv

主なオプション

オプション動作
-u / --set-upstream追跡先設定(初回 push 用)
--all全ローカルブランチを push
--tagsタグも一緒に push
--follow-tags注釈付きタグ(annotated)のみ push
--delete branchnameリモートブランチ削除
--force / -f強制 push(危険)
--force-with-lease安全な強制 push(推奨)
-n / --dry-run実際には push せず動作確認
-v / --verbose詳細表示

タグの push

# タグ作成
git tag v1.0.0
git tag -a v1.0.0 -m "Release 1.0.0"      # 注釈付き(推奨)

# タグだけ push(デフォルトの push にタグは含まれない)
git push origin v1.0.0
git push origin --tags                     # 全タグ
git push --follow-tags                     # 注釈付きタグのみ

# リモートタグ削除
git push origin --delete v1.0.0
git push origin :refs/tags/v1.0.0          # 旧書き方

リモートブランチの削除

# 推奨
git push origin --delete feature/login

# 旧書き方(同じ意味)
git push origin :feature/login

# ローカルも消す
git branch -d feature/login

force-with-lease: 安全な強制 push

rebase したブランチを push する際、リモートに自分が知らないコミットが来ていたら誰かの作業を消す事故になります。--force-with-lease はそれを防ぎます。

# ❌ 危険: 他人の commit を含めて全部上書き
git push --force origin main

# ✅ 安全: ローカルが知っているリモート状態と一致しなければ拒否
git push --force-with-lease origin feature/login

# Git 2.30+ では更に安全な --force-if-includes も併用可
git push --force-with-lease --force-if-includes origin feature/login

共有ブランチ(main / develop)には絶対に --force しないのが鉄則です。

リモートの設定確認

# リモート一覧
git remote -v
# origin     git@github.com:user/repo.git (fetch)
# origin     git@github.com:user/repo.git (push)

# リモート追加
git remote add upstream git@github.com:original/repo.git

# URL 変更(HTTPS ↔ SSH 切替)
git remote set-url origin git@github.com:user/repo.git

# リモート削除
git remote remove upstream

複数リモート(fork 運用)

OSS の fork 運用では、自分の fork が origin、本家が upstream という慣習です。

# 本家を upstream として追加
git remote add upstream https://github.com/original/repo.git

# 本家の最新を取り込み
git fetch upstream
git checkout main
git merge upstream/main

# 自分の fork に push
git push origin main

認証: HTTPS と SSH

方式長所注意
HTTPS + PATファイアウォール越えやすいパスワード代わりに Personal Access Token 必須
SSH 鍵毎回認証不要、高速鍵管理(ssh-add / config)が必要
HTTPS + GitHub CLIgh auth login で簡単gh コマンドの導入が必要
# SSH 鍵生成
ssh-keygen -t ed25519 -C "you@example.com"

# 公開鍵を GitHub の Settings → SSH and GPG keys に登録
cat ~/.ssh/id_ed25519.pub

# 接続テスト
ssh -T git@github.com
# → Hi user! You've successfully authenticated...

# HTTPS → SSH に切替
git remote set-url origin git@github.com:user/repo.git

push を rebase で前処理(履歴をきれいに)

# main を最新化
git fetch origin
git rebase origin/main   # feature の上から main 最新コミットの上に積み直す

# コンフリクト解決後
git rebase --continue

# force-with-lease で push(rebase 後は履歴が書き換わるので force 必須)
git push --force-with-lease origin feature/login

よくあるエラー

エラー原因対処
rejected (non-fast-forward)リモートに新しい commit があるgit pull --rebase してから push
rejected (fetch first)同上pull / fetch + rebase
permission denied (publickey)SSH 鍵未設定 / 鍵間違いssh-add, 鍵を GitHub に登録
remote: HTTP 403権限なし or PAT 期限切れPAT 再発行 / 権限確認
protected branch hook declinedブランチ保護で直接 push 禁止PR を作って merge

FAQ

Q: 全ブランチを一括 push したい
A: git push --all origin。タグも含めるなら git push --all --tags origin

Q: push 前に hook で lint や test を走らせたい
A: .git/hooks/pre-push に書くか、Husky / lefthook で管理。CI でも走らせて二重防御。

Q: 巨大ファイルを誤って push してしまった
A: git filter-repo で履歴から削除して force push。一度公開された情報はキャッシュ済かもしれないので注意。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 用語一覧
  2. エラー一覧
  3. git本体のインストール(Linux)
  4. Linuxサーバーへのgit導入とクライアントのセットアップ
  5. リモートリポジトリをローカルリポジトリとしてクローンする方法
  6. リモートとローカルのリポジトリを同期(pull)する方法
  7. 設定の確認
  8. gitユーザー名とemailの設定
  9. リモートリポジトリの作成
  10. ローカルリポジトリの作成
  11. 新規ファイル/ディレクトリをインデックスに登録
  12. インデックスの登録状態を確認
  13. ローカルリポジトリの変更をコミット
  14. コミット履歴の確認
  15. クライアントからリモートリポジトリの接続設定、確認、削除
  16. リポジトリへのプッシュ
  17. リモートリポジトリからクライアントへのSSHクローン
  18. リモートとローカルの差分表示
  19. バージョンの確認
  20. プロキシの設定
  21. ローカルをリモートリポジトリの状態に戻す
  22. ブランチの作成, 一覧表示, 切り替え
  23. ブランチのマージと削除
  24. リベース
  25. .gitignoreの書き方
  26. .gitignoreの設定が反映されない場合
  27. 特定のファイルをgitの管理から外す方法
  28. 参照(ORIG_HEAD, HEAD, FETCH_HEAD)
  29. git rm [-r --cached] の取り消し
  30. 一部のディレクトリ/ファイルのみをリポジトリから復元する方法
  31. ローカルとリモートリポジトリの有無を同期
  32. pushの取消し方法
  33. マージツールの起動方法
  34. Gitで「MERGING」の状態

最近更新/作成されたページ