Git でブランチをチェックアウトせずに更新する方法

https://gotohayato.com/content/120/
pullしたいブランチをcheckoutしなくてもpullの動作を行える方法。

git fetch origin master:master

意味としては、originレポジトリのmaster(左側の記述)をfetchして、ローカルレポジトリのmaster(右側の記述)へFast-Fowardで変更を反映させるというもの。
Fast-Fowardできない場合は失敗する。
応用として、以下コマンドで「ブランチをcheckoutせずにマージ」もできる。

git fetch . feature_branch:develop

意味としては、ローカルレポジトリから自分自身をfetchして(つまり何もせずに)、左ブランチから右ブランチへFast-Fowardで変更を反映させている。(Fast-Fowardできない場合は失敗)



https://git-scm.com/book/ja/v2/Git%E3%81%AE%E5%86%85%E5%81%B4-Refspec
「master:master」などの指定はrefspecの書式。

refspecの書式は : で、その前にオプションとして + を指定できます。
ここで はリモート側の参照に対するパターンで、 はそれらの参照がローカルで書きこまれる場所を示します。

  1. をつけると、fast-forwardでない場合でも参照を更新するようGitに指示できます。

ちなみにこの説明はfetchの場合。必ずしもsrcがリモート側とは限らない。
例えば「git push origin develop:remote_develop」ではsrcがローカル側でdstがリモート側となる。