Git: ветвь переключения без отсоединения головки

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

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

Я новичок в git, поэтому мне жаль, что я идиот, но я не могу найти ничего в документах, которые помогут мне снова прикрепить голову.

ИЗМЕНИТЬ

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

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

Ответ 1

# 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 - это имя "remote", и вы можете получить список из них с помощью

branch -a 

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

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

Ответ 2

git clone [email protected]:abc/def.git
cd def

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

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

Затем, после работы там, просто нажмите github на

git push

Ответ 3

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

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

$ git branch experimental origin/experimental

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

$ git checkout experimental

Однако, Кент прав - эти две команды могут быть объединены

$ git checkout -b experimental origin/experimental

Ответ 4

В Git 2.23 (август 2019 г.) вы будете использовать команду git switch command

Если у вас есть удаленная ветвь с тем же именем, она будет автоматически отслежена:

$ git switch new-topic
Branch 'new-topic' set up to track remote branch 'new-topic' from 'origin'
Switched to a new branch 'new-topic'