Книга ProGit имеет очень хорошее объяснение :
Отслеживание веток
Проверка локальной ветки отудаленная ветвь автоматически создает так называемую ветвь отслеживания.Отслеживающие ветви - это локальные ветви, которые имеют прямое отношение к удаленной ветви.Если вы работаете с веткой отслеживания и набираете git push, Git автоматически знает, на какой сервер и в какую ветку нужно перейти.Кроме того, при запуске git pull в одной из этих веток все удаленные ссылки извлекаются, а затем автоматически объединяются в соответствующую удаленную ветвь.
Когда вы клонируете репозиторий, он обычно автоматически создает главную ветвь, которая отслеживает происхождение / основную ветвь,Вот почему git push и git pull работают из коробки без других аргументов.Однако вы можете настроить другие ветви отслеживания, если хотите - те, которые не отслеживают ветви по источнику и не отслеживают основную ветку.Простой случай - это пример, который вы только что видели, с git checkout -b [branch] [remotename]/[branch]
.Если у вас Git версии 1.6.2 или новее, вы также можете использовать сокращение --track
:
$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch refs/remotes/origin/serverfix.
Switched to a new branch "serverfix"
Чтобы настроить локальную ветку с именем, отличным от удаленной, вы можете легко использоватьпервая версия с другим локальным именем ветви:
$ git checkout -b sf origin/serverfix
Branch sf set up to track remote branch refs/remotes/origin/serverfix.
Switched to a new branch "sf"
Теперь ваша локальная ветка sf
будет автоматически выдвигать и извлекать из origin/serverfix
.