Подтвердить что ты не робот

Каковы варианты использования локальных веток для отслеживания других локальных веток?

В Git мы можем сделать это:

$ git checkout -b testbranch --track master
Branch testbranch set up to track local branch master.
Switched to a new branch 'testbranch'

Каковы варианты использования таких ветвей?

4b9b3361

Ответ 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. Если я забуду, у меня появится сообщение об ошибке, которое пробегает мою память, и я попробую еще раз. Нет большой сделки.

Ответ 2

Я пытаюсь выполнить эту команду, и поиск мастера будет выполняться как "действительно" удаленная ветвь.

В .git/config добавлено следующее:

[branch "testbranch"]
    remote = .
    merge = refs/heads/master

И вы можете вытащить из мастера с помощью $git pull и нажать на мастер, используя

$git push . testbranch:master

Или вы можете просто набрать $git push, добавив следующую конфигурацию в .gitconfig

[push]
    default = upstream