2013-02-23 3 views
3

Я создал новый локальный репозиторий зеркальный из другого удаленного хранилища:Git филиал с удаленного тегом

git init 
git remote add original {url} 
git pull original master 
git remote add origin {url} 
git push -u origin master 

Это создало бы зеркало original сек мастер-ветвь. Теперь я хотел бы создать новую ветку тега от original.

Как должны выглядеть команды? Я попытался git checkout -b newbranch original/tagname, но я получил:

fatal: Cannot update paths and switch to branch 'newbranch' at the same time. 
Did you intend to checkout 'original/tagname' which can not be resolved as commit? 

ответ

8

Вам нужно обернуть это в двух инструкций

git checkout tagname && git checkout -b newbranch 

Альтернативно

git checkout tagname -b newbranch 
+0

Это удаленный тэг, обе команды не работают (то же самое сообщение об ошибке, как описано выше) – dtrunk

+1

Вы должны сделать 'git pull original tagname' – jchapa

+0

@ dtrunk попробуйте добавить теги/префикс к вашему имени удаленного тега, как это 'git checkout tags/<имя-remote-tag-name> -b <новое-local-branch-name>' – Obaid

4

Там нет понятия «удаленные теги отслеживания», как там «удаленные ветви отслеживания». Вы либо получаете теги из репо, либо нет. По крайней мере, в стандартных настройках. Вы можете это изменить, но я бы не рекомендовал этого. Не работает ли это?

git checkout -b newbranch tagname 
+0

Нет, это не сработало. Но это то, что я уже пробовал! – dtrunk

+3

do 'git fetch origin -t' и повторите попытку. – Chronial

5

Это работало для меня

$git fetch --tags 
$git tag 
$git checkout -b <new_branch_name> <tagname> 
0

Следующая Баш скрипт может быть использован для автоматизации этого процесса:

#!/bin/bash 

old_name="old-branch-name" 
new_name="new-branch-name" 

git checkout ${old_name} 
git branch -m ${old_name} ${new_name} 
git push origin :${old_name} ${new_name} 
git push origin -u ${new_name} 
echo "Branch ${old_name} renamed to ${new_name}" 
Смежные вопросы