Ветвь foo
уже существует, что указывает на некоторую фиксацию.Поскольку ваши имена веток ваши , вы можете просто создать ветку с именем foo
, чтобы существовало foo
.Выберите коммит, на который он должен указывать, и создайте его:
branch foo a123456
(при условии, конечно, что a123456
является допустимым коммитом).Теперь git checkout foo
переключит вас на коммит a123456
и ветвь foo
.
Ветвь foo
не существует, но не существует origin/foo
.Нет origin/foo
имени для удаленного отслеживания, которое можно было бы указать в качестве аргумента git checkout --track origin/foo
.Теперь git checkout foo
просто потерпит неудачу.
Ваши имена для удаленного отслеживания ваши , так что вы можете просто удалить origin/foo
, но есть загвоздка.Удаление легко:
git branch -r -d origin/foo
Теперь это прошло!К сожалению, запуск git fetch
вернет его обратно, пока Git в origin
имеет ветку с именем foo
, потому что вы сказали своему Git - возможно, непреднамеренно;это значение по умолчанию - ваш Git должен рабски обновлять или заново создавать все ваши origin/*
имена, чтобы они соответствовали именам ветвей origin
каждый раз, когда вы запускаете git fetch
для удаленного origin
.Это означает, что для создания флешки удаления вам нужно будет убедить Git на origin
удалить ветку foo
.
Это может быть возможно, а может быть даже легко.Это может быть то, что вы должны сделать здесь.Но Git origin не твой Git, и я не могу сказать тебе, подходит ли это для чужого Git.Вам придется найти или выяснить это для себя.
Наконец, режим DWIM завершается с ошибкой , если существует два или более возможных foo
с.То есть git checkout foo
стал git checkout --track origin/foo
, но он сделал это только , потому что , перечислив все ваших имен для удаленного слежения, единственное, которое напоминало foo
, было origin/foo
.
Вы можете иметь более одного пульта.На самом деле, вы можете иметь более одного пульта даже для одного Git-репозитория.Таким образом, вы можете просто добавить второй пульт:
git remote add origin2 <url>
, где <url>
- это тот же URL-адрес, который вы используете для origin
, затем запустите git fetch
.Теперь у вас будет не только origin/foo
, но и origin2/foo
, и git checkout foo
не будет знать , какой для DWIM, поэтому он не будет.
Недостаток здесьчто это также приведет к сбою всех других DWIM git checkout
операций.Если вас это не беспокоит, вы можете остановиться здесь.Если это так, вы можете это исправить: вы можете настроить origin2
как трекер с одной ветвью , изменив настройку для origin2
.Вы можете сделать это после создания дополнительного пульта, отредактировав .git/config
, или вы можете сделать это при , создав origin2
, используя:
git remote add origin2 <url> -t foo
, так что origin2
являетсяодноотраслевой трекер.Теперь у вас будет только origin2/foo
, а не origin2/master
, не origin2/develop
и никаких других подобных имен.