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の書式は
: で、その前にオプションとして + を指定できます。
ここではリモート側の参照に対するパターンで、 はそれらの参照がローカルで書きこまれる場所を示します。
- をつけると、fast-forwardでない場合でも参照を更新するようGitに指示できます。
ちなみにこの説明はfetchの場合。必ずしもsrcがリモート側とは限らない。
例えば「git push origin develop:remote_develop」ではsrcがローカル側でdstがリモート側となる。