リモートリポジトリの追加、削除、表示などを行います。
オプション/サブコマンド | 説明 |
---|---|
add <名前> <URL> | 新しいリモートリポジトリを追加 |
remove <名前> | リモートリポジトリを削除 |
rename <古い名前> <新しい名前> | リモートリポジトリの名前を変更 |
-v, --verbose | リモートリポジトリの名前とURLを表示 |
show <名前> | 指定したリモートリポジトリの詳細情報を表示 |
例:
git remote
- リモートリポジトリの一覧を表示git remote -v
- リモートリポジトリの一覧とURLを表示git remote add origin https://github.com/username/repo.git
- originという名前でリモートリポジトリを追加git remote remove origin
- originリモートを削除git remote rename origin upstream
- originリモートの名前をupstreamに変更git remote show origin
- originリモートの詳細情報を表示
ローカルブランチの変更をリモートリポジトリに送信します。
オプション | 説明 |
---|---|
-u, --set-upstream | アップストリームブランチを設定(以降は引数なしでpush可能) |
--force, -f | リモートブランチを強制的に上書き(注意: 履歴が書き換わる) |
--force-with-lease | リモートブランチが予期せず変更されていない場合のみ強制プッシュ |
--tags | すべてのタグをプッシュ |
--delete | リモートブランチを削除 |
例:
git push origin main
- ローカルのmainブランチをoriginリモートにプッシュgit push -u origin feature
- featureブランチをプッシュし、アップストリームとして設定git push
- 現在のブランチを設定済みのアップストリームにプッシュgit push --force origin main
- mainブランチを強制的にプッシュ(注意して使用)git push --force-with-lease origin main
- 安全な強制プッシュgit push origin --delete feature
- リモートのfeatureブランチを削除
リモートブランチの変更をローカルブランチに取り込みます(fetch + merge)。
オプション | 説明 |
---|---|
--rebase | マージの代わりにリベースを使用 |
--no-commit | 自動コミットせずに変更をステージング |
--ff-only | Fast-forwardのみ許可(マージコミットを作成しない) |
--prune | リモートで削除されたブランチの参照を削除 |
例:
git pull
- 現在のブランチに対応するリモートブランチから変更を取得してマージgit pull origin main
- originリモートのmainブランチから変更を取得してマージgit pull --rebase
- リモートの変更を取得し、ローカルの変更をリベースgit pull --ff-only
- Fast-forwardできる場合のみプル(マージコミットを作成しない)
リモートリポジトリから変更を取得しますが、ローカルブランチにはマージしません。
オプション | 説明 |
---|---|
--all | すべてのリモートから取得 |
--prune | リモートで削除されたブランチの参照を削除 |
--tags | すべてのタグを取得 |
--depth=<深さ> | 指定した深さまでの履歴のみを取得 |
例:
git fetch
- デフォルトリモート(通常はorigin)から変更を取得git fetch origin
- originリモートから変更を取得git fetch --all
- すべてのリモートから変更を取得git fetch --prune
- リモートで削除されたブランチの参照も削除git fetch origin main
- originリモートのmainブランチのみ取得
git pull
とgit fetch
はどちらもリモートリポジトリからデータを取得するコマンドですが、
その動作と用途には重要な違いがあります。
git fetch | git pull |
---|---|
リモートリポジトリからデータを取得するだけで、ローカルの作業ブランチには変更を加えない | リモートリポジトリからデータを取得し、自動的にローカルの作業ブランチにマージ(または指定した場合はリベース)する |
安全な操作:現在の作業に影響を与えない | マージによってコンフリクトが発生する可能性がある |
2ステップ操作の最初のステップ(後で手動でマージするため) | 1ステップ操作(fetchとmergeを自動的に実行) |
git fetchの動作:
refs/remotes/
を更新(例:refs/remotes/origin/main
)refs/heads/main
など)は変更されない.git/objects
ディレクトリに保存されるgit pullの動作:
git fetch
を実行してリモートの変更を取得git merge
(または--rebase
オプションを指定した場合はgit rebase
)を実行git fetchを使うべき場合:
git pullを使うべき場合:
fetchした後、以下のコマンドでリモートとの差分を確認できます:
git diff main origin/main
- ローカルのmainブランチとリモートのmainブランチの差分を表示git log main..origin/main
- リモートにあって、ローカルにないコミットを表示git log -p main..origin/main
- 差分のあるコミットの詳細な変更内容も表示確認後、マージする場合は:
git merge origin/main
- リモートの変更をローカルブランチにマージgit rebase origin/main
- リモートの変更をベースにローカルの変更を再適用
ワークフロー例: 多くの開発者は、git fetch
を使って変更を確認してから、明示的にgit merge
またはgit rebase
を実行するワークフローを好みます。これにより、リモートの変更を統合する前に、その内容を理解し、潜在的な問題を特定する機会が得られます。