Неустранимый: Недопустимое имя объекта: 'master'


182

У меня есть частный сервер под управлением git 1.7 Когда я

git init 

папка не создает основную ветку. Потому что, когда я делаю:

git branch 

это ничего не перечисляет. Когда я делаю:

git --bare init

это создает файлы. Когда я печатаю

git branch master 

это говорит:

fatal: Not a valid object name: 'master'.

Тот же результат при попытке создать новую ветку:git branch newbranch
— Sören

Ответы:


281

Когда я git initпапка не создает главную ветку

Это правда и ожидаемое поведение. Git не будет создавать masterветки, пока вы не совершите что-то.

Когда я делаю git --bare initэто создает файлы.

Non-bare git initтакже создаст те же файлы в скрытой .gitдиректории в корне вашего проекта.

Когда я печатаю, git branch masterон говорит: «Неустранимый: Недопустимое имя объекта:« мастер »»

Это опять правильное поведение. Пока вы не совершите, нет мастера ветки.

Вы не задавали вопрос, но я отвечу на вопрос, который, как я предполагал, вы хотите задать. Добавьте один или несколько файлов в ваш каталог, и git addих, чтобы подготовить фиксацию. Затем git commitсоздать свой начальный коммит и masterветвь.


3
Итак, что, если я вообще никогда не хотел указатель ветви с именем "master"? Что если бы я хотел, чтобы это называлось «основным»? Нет способа начать с другого имени для первого указателя ветки? Нет параметров "git init"? Могу ли я пойти и изменить имя, указанное в .git / HEAD? Есть ли еще какие-то файлы, которые мне нужно изменить?
— Джеменаке

1
@Jemenake Затем запустите свой репозиторий, сделайте коммит и переименуйте ветку. Если вы действительно хотите избежать создания «основной» ветви, отредактируйте ее .git/HEADи измените refs/heads/masterна refs/heads/main, но нет никакой причины делать это. Просто переименуйте свою ветку после первого коммита.
— Meagar

13
Вы можете использовать git checkout -b <branchname>для изменения заголовка - вам не нужно редактировать файл.
— Superfly Джон

1
Последняя часть была золотой, TFS GIT поставляется с полностью неинициализированным git-репо. Таким образом, после первого клонирования с использованием SourceTree ничего не работает, долго не мог понять, пока «Затем git commit для создания вашей первоначальной фиксации и основной ветки». Неужели нет способа получить master-local / remote без начальной фиксации / push?
— Павел Cioch

Последнее объяснение помогает мне понять, что ветка не может существовать, если нет коммитов.
— Mayur Patil

23

Git создает основную ветку, как только вы сделали свой первый коммит. Нет ничего для ветки, если в хранилище нет кода.


1
Но вам нужна новая ветка, чтобы протолкнуться в мастера.
— Сёрен

1
Вот вопрос о том, «Git создает основную ветку, как только вы сделали свой первый коммит». Тогда почему «git status» показывает «On Branch Master» перед всем этим?
— Tick20

16

Во-первых, когда вы создаете «пустой репозиторий», вы не собираетесь с ним работать (он не содержит рабочей копии, поэтому git branchкоманда бесполезна).

Причина, по которой у вас не будет masterветки даже после выполнения команды a, git initзаключается в том, что коммитов нет: когда вы создаете свой первый коммит, у вас будет masterветвь.


1
Хорошо, это ясно. Но когда я совершаю это, он говорит: fatal: empty идент
— Рой ван Зантен

Я исправил это. Но когда я хочу получить / получить этот репо с другого компьютера. Должен ли я сделать git init там?
— Рой ван Зантен

@RoyvanZanten Вы можете использовать, git cloneчтобы избавиться от необходимости делать git initна стороне получателя.
— Бореалид

Мне удалось заставить все это работать. Нет ошибок Но когда я пытаюсь нажать, он говорит: Запись объектов <bla> bla> Total <3/3> На SERVER 59fa0tweirdcod04 master> master Но когда я проверяю файлы на сервере, ничего не происходит.
— Рой ван Зантен

@RoyvanZanten Вы ищете хранилище сервера или рабочую копию сервера ? Вам нужно сделать, git checkoutесли вы хотите, чтобы WC отражал то, что находится в .gitкаталоге (куда вы нажали).
— Бореалид

12

Перед созданием новой ветки вам нужно зафиксировать хотя бы один раз на master.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.