Ответ 1
Настройка локальной ветки для отслеживания другой локальной ветки обычно не полезна, но я могу вспомнить несколько случаев, когда это может быть удобно:
-
У вас могут быть некоторые псевдонимы или скрипты, которые работают с ветвями вверх (например, с помощью сокращения
@{u}
, см.git help revisions
). Если это так, настройка локальной ветки для отслеживания другой локальной ветки позволит вам протестировать ваши псевдонимы или сценарии, не затрагивая удаленный репозиторий или создавая временный фиктивный репозиторий. -
Предположим, что вы работаете с новым локальным ветки с именем
foo
с вашего локального веткиmaster
(который отслеживаетorigin/master
), но вы еще не готовы публиковатьfoo
доorigin
, Или, может быть, вы никогда не захотите нажать наorigin
- возможно, коммиты добавили кучу неприятных вызововprintf()
, которые вы посыпали, чтобы помочь в отладке. В любом случае, всякий раз, когдаmaster
обновляется, вы хотите переустановитьfoo
наmaster
. Обычно вы просто набираетеgit rebase master
, но если вы похожи на меня, вы можете часто набирать толькоgit rebase
по привычке. Если вы это сделаете, вы получите сообщение об ошибке:$ git rebase There is no tracking information for the current branch. Please specify which branch you want to rebase against. See git-rebase(1) for details git rebase <branch> If you wish to set tracking information for this branch you can do so with: git branch --set-upstream-to=origin/<branch> foo
У вас может возникнуть соблазн сделать это:
git branch --set-upstream-to=origin/master foo
но это может иметь разрушительные последствия, если вы привыкли печатать
git push
каждые несколько коммитов (вы в конечном итоге нажимаете на свою незавершенную работу на локальную ветвьfoo
наorigin
master
, если у васpush.default
установлено значениеupstream
, как и я).Вместо этого вы можете настроить локальную ветвь
foo
для отслеживания локальной веткиmaster
. Теперь ваша привычка печататьgit rebase
делает то, что вы хотите, а рассеянноеgit push
испортит вашу локальную ветвьmaster
, а неorigin
master
.Но обычно не стоит настраивать локальную ветвь для отслеживания другой локальной ветки только для
git rebase
. Я думаю, что легче жить с запоминанием, чтобы набратьgit rebase master
вместоgit rebase
. Если я забуду, у меня появится сообщение об ошибке, которое пробегает мою память, и я попробую еще раз. Нет большой сделки.