git: переключить ветку без отсоединения головы
У меня есть репозиторий на github с основной веткой (master) и веткой для некоторых экспериментальных работ. Я сделал несколько коммитов и подтолкнул к экспериментальной ветви, и все было хорошо.
Теперь на другой машине я пытаюсь клонировать свой репозиторий (git clone repository), а затем переключаюсь на экспериментальную ветку (git checkout branchname), но каждый раз, когда я делаю это, моя голова отсоединяется и я не могу протолкнуть свои изменения. Что я делаю неправильно? У меня такое ощущение, что я где-то упускаю фундаментальную концепцию git, но чтение случайных страниц руководства git не дает мне никаких подсказок.
Я новичок в Git, так что извините, если я идиот, но я не могу найти в документах ничего, что помогло бы мне снова прикрепить мою голову.
РЕДАКТИРОВАТЬ
Концепция отслеживания ветки - это то, чего мне не хватало. Теперь, когда я понимаю эту концепцию, все ясно. Лично я нахожу git branch --track
синтаксис должен быть гораздо более интуитивным, чем git checkout -b branch-name origin/branch-name
,
Спасибо за помощь!
3 ответа
# 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
Если у вас включены цвета, локальные ветви будут одного цвета, а удаленные - другого.
Вы должны сначала создать удаленную ветку, отслеживаемую локально, чтобы иметь возможность переключаться на нее и работать с ней.
git clone git@github.com:abc/def.git
cd def
Теперь создайте ветку отслеживания:
git branch --track experimental origin/experimental
git checkout experimental
Затем, поработав там, просто нажмите на github
git push
Чтобы расширить ответ Кента, после того, как вы сделаете свой клон, единственной ветвью, которая у вас будет (удаленные не считаются), будет та, которая была активна в репозитории, из которого вы клонировали, - master в вашем случае.
Итак, сначала вы захотите создать новую ветку для отслеживания удаленной экспериментальной ветви:
$ git branch experimental origin/experimental
а затем проверить это:
$ git checkout experimental
Однако Кент прав - эти две команды можно объединить
$ git checkout -b experimental origin/experimental
With Git 2.23 (August 2019), you would use the git switch
command
If you have a remote branch of the same name, it will be automatically tracked:
$ git switch new-topic
Branch 'new-topic' set up to track remote branch 'new-topic' from 'origin'
Switched to a new branch 'new-topic'