git: переключить ветку без отсоединения головы - PullRequest
93 голосов
/ 23 января 2009

У меня есть репозиторий на github с основной веткой (master) и веткой для некоторых экспериментальных работ. Я сделал несколько коммитов и отправился в экспериментальную ветку, и все было хорошо.

Теперь на другой машине я пытаюсь клонировать свой репозиторий (git clone repository ), а затем переключаюсь на экспериментальную ветку (git checkout branchname ), но каждый раз, когда я делаю это это моя голова отрывается, и я не могу подтолкнуть мои изменения. Что я делаю неправильно? У меня такое ощущение, что я где-то упускаю фундаментальную концепцию git, но чтение случайных страниц руководства git не дает мне никаких подсказок.

Я новичок в Git, так что извините, если я идиот, но я не могу найти в документах ничего, что помогло бы мне снова прикрепить мою голову.

EDIT

Концепция отслеживающей ветви - это то, чего мне не хватало. Теперь, когда я понимаю эту концепцию, все ясно. Лично я нахожу синтаксис git branch --track гораздо более интуитивным, чем git checkout -b branch-name origin/branch-name.

Спасибо за помощь!

Ответы [ 3 ]

104 голосов
/ 23 января 2009
# first time: make origin/branchname locally available as localname
git checkout -b localname origin/branchname 

# othertimes 
git checkout localname 

git push origin

Для удобства вы можете использовать одну и ту же строку для localname & branchname
Когда вы проверили origin/branchname, вы на самом деле не проверяли ветку. origin/branchname - это «удаленное» имя, и вы можете получить их список с помощью

branch -a 

Если у вас включены цвета, локальные ветви будут одного цвета, а удаленные - другого.

Сначала необходимо создать удаленную ветку, отслеживаемую локально, чтобы иметь возможность переключаться и работать с ней.

16 голосов
/ 23 января 2009
git clone git@github.com:abc/def.git
cd def

Теперь создайте ветку отслеживания:

git branch --track experimental origin/experimental
git checkout experimental

Затем, поработав там, просто нажмите на github с помощью

git push
10 голосов
/ 23 января 2009

Чтобы расширить ответ Кента, после того, как вы сделаете свой клон, единственная ветвь, которая у вас будет (удаленные не считаются), - это та, которая была активна в репозитории, из которого вы клонировали - master в вашем случае.

Итак, сначала вы захотите создать новую ветку для отслеживания удаленной экспериментальной ветви:

$ git branch experimental origin/experimental

, а затем проверьте:

$ git checkout experimental

Однако Кент прав: эти две команды можно объединить

$ git checkout -b experimental origin/experimental
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...