リモートリポジトリの追加、削除、表示などを行います。
| オプション/サブコマンド | 説明 |
|---|---|
| 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を実行するワークフローを好みます。これにより、リモートの変更を統合する前に、その内容を理解し、潜在的な問題を特定する機会が得られます。