В Git мы можем сделать это:
$ git checkout -b testbranch --track master
Branch testbranch set up to track local branch master.
Switched to a new branch 'testbranch'
Каковы варианты использования таких ветвей?
В Git мы можем сделать это:
$ git checkout -b testbranch --track master
Branch testbranch set up to track local branch master.
Switched to a new branch 'testbranch'
Каковы варианты использования таких ветвей?
Настройка локальной ветки для отслеживания другой локальной ветки обычно не полезна, но я могу вспомнить несколько случаев, когда это может быть удобно:
У вас могут быть некоторые псевдонимы или скрипты, которые работают с ветвями вверх (например, с помощью сокращения @{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
. Если я забуду, у меня появится сообщение об ошибке, которое пробегает мою память, и я попробую еще раз. Нет большой сделки.
Я пытаюсь выполнить эту команду, и поиск мастера будет выполняться как "действительно" удаленная ветвь.
В .git/config добавлено следующее:
[branch "testbranch"]
remote = .
merge = refs/heads/master
И вы можете вытащить из мастера с помощью $git pull
и нажать на мастер, используя
$git push . testbranch:master
Или вы можете просто набрать $git push
, добавив следующую конфигурацию в .gitconfig
[push]
default = upstream