См. LeGE C ответ .
В качестве альтернативы, сначала рассмотрите возможность создания ветви на пульте:
git fetch origin # update origin/master if/as needed
git push origin origin/master:newbranch
Первый шаг, который вам нужен только в том случае, если ваши ветки удаленного слежения устарели (но их можно использовать в любое время), попросите Git вызвать их Git, получить от них новые коммиты, сохранить их в своем клоне, и обновите все ваши origin/*
имена. (Мне также нравится использовать --prune
здесь, но я делаю это с git config fetch.prune true
, чтобы Git просто делал это автоматически.)
На шаге git push
ваш Git вызывает Git на origin
и просит их создать или обновить имя ветви newbranch
на основе вашего origin/master
, который - если вы обновились достаточно недавно - синхронизируется c с их master
. То есть вы просите их создать их ветвь newbranch
на основе (вашей копии) их master
, поскольку newbranch
еще не существует в их хранилище.
Предполагая, что они подчиняются этому вежливому запросу «создать или обновить», newbranch
теперь существует на origin
. Теперь, когда newbranch
существует на origin
, ваш собственный Git создает origin/newbranch
.
Теперь вы можете просто запустить:
git checkout newbranch
, который обнаружит, что gosh, у вас нет ветки с именем newbranch
, но у вас есть origin/newbranch
, поэтому она должна создать newbranch
из origin/newbranch
. Если ваш Git предшествует Git 2.23, вы можете использовать git checkout --track origin/newbranch
, чтобы избежать двусмысленности, а если это 2.23 или более поздняя версия, вы можете использовать git switch newbranch
, но в целом это в основном работает.
Я не делаю ничего из вышеперечисленного: я просто создаю ветку самостоятельно, в зависимости от ситуации. Затем на первом git push
я использую сокращение git push -u origin HEAD
(после двойной проверки с git status
, что я нахожусь на правильной ветке, и все готово).