Git メモ

用語整理

用語 説明
origin git remote -v に登録されているリモートリポジトリ名(URL のエイリアス)
origin/feature リモートトラッキングブランチ(remote-tracking branch)。最後に git fetch した時点のリモート feature のスナップショット
upstream ローカルブランチが既定で追跡するリモートブランチ

git pull origin feature

git pull origin feature は次の2段階で実行されます。

git pull origin feature
  = git fetch origin feature
  + git merge FETCH_HEAD

git fetch origin feature により

  • リモート origin の feature を取得する
  • origin/feature を更新する
  • FETCH_HEAD に取得したコミットを記録する

その後、

git merge FETCH_HEAD

によって、現在 checkout しているブランチへマージされます。

ポイント

  • origin feature は常にリモート origin の feature ブランチを指す
  • fetch により origin/feature が更新される
  • merge 先は現在 checkout しているブランチ

例えば main を checkout 中なら

origin/feature ──► main

へマージされます。

git pull origin feature:feature

この書き方は特殊な構文です。

内部的には

git fetch origin feature:feature
git merge FETCH_HEAD

が実行されます。

feature:feature の意味

git fetch の refspec

<取得元>:<更新先>

を指定しています。

つまり

  • 取得元:リモート feature
  • 更新先:ローカル feature

です。

挙動

現在 feature を checkout 中なら

  • ローカル feature が更新される(fast-forward が必要)
  • 続いて git merge FETCH_HEAD が実行される
  • 既に fast-forward されていれば merge は「Already up to date.」となる

現在 feature を checkout していない場合は、

  • ローカル feature は更新される
  • 現在 checkout 中のブランチへ FETCH_HEAD がマージされる

つまり merge が行われないわけではありません。

git push origin feature

git push origin feature

送信元はローカル feature です。

feature ─────────► origin/feature

ポイント

  • origin/feature を経由して送信するわけではない
  • push 成功後、ローカルの origin/feature も最新状態へ更新される

upstream

upstream は、ローカルブランチが既定で追跡するリモートブランチです。

設定されていると

git pull
git push

だけで対象ブランチが決まります。

確認

git branch -vv

例

* feature abc1234 [origin/feature] コミットメッセージ

設定

git push -u origin feature

または

git switch -c feature --track origin/feature

(従来の git checkout -b feature origin/feature と同等)