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'
Другие вопросы по тегам