Почему моя локальная ветка git исчезает каждый раз, когда я создаю новую?

Я не использовал Git в течение нескольких месяцев. Я только запустил новый проект, и меня беспокоит одна вещь: каждый раз, когда я создаю новую ветку, уже существующая исчезает, как если бы она была заменена. Я имею в виду, когда я делаю "git branch", у меня ничего нет! Очевидно, что моя "Git Checkout " не работает. У меня даже больше нет моей ветки. Только текущий.

У меня нет этой проблемы с уже работающими проектами.

Это почему?

1 ответ

Решение

Это нормально: вы только что создали новый проект:

$ mkdir newproj
$ cd newproj
$ git init
Initialized empty Git repository in .../newproj

На данный момент нет ветвей. Тем не менее, как git status скажу вам, вы на master ветка:

$ git branch
$ git status
On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)
$ 

Вы можете переключиться на другую ветку, используя git checkout -b:

$ git checkout -b xyz
Switched to a new branch 'xyz'

и теперь у вас еще нет веток, но теперь вы находитесь на ветке xyz, как git status скажу тебе.

Это странное состояние нормально, потому что нет коммитов. Когда нет коммитов, не может быть ветвей, потому что имя ветки просто содержит хэш-идентификатор некоторого существующего коммита. Без коммитов не может существовать имя ветки.

Когда вы создаете новый коммит, Git выполняет следующие шаги (первые несколько не в каком-либо определенном порядке; только последние несколько имеют фактический порядок):

  1. Соберите свое имя и адрес электронной почты, чтобы использовать в новом коммите.
  2. Получить (представление вашего компьютера) текущее время, чтобы прикрепить к вашему имени и адресу электронной почты.
  3. Соберите сообщение журнала.
  4. Заморозьте содержимое индекса (индекс, в котором вы строите новые коммиты: git add копирует файлы из рабочего дерева в указатель).
  5. Получить идентификатор хэша текущего коммита, если есть текущий коммит. Получите хэш-идентификатор всех коммитов, которые будут объединены, если это происходит.
  6. Используйте всю эту информацию для создания нового коммита. Создание коммита присваивает ему его хэш-идентификатор, который представляет собой криптографическую контрольную сумму всего этого содержимого (ваше имя и адрес электронной почты с отметкой времени, ваше сообщение журнала, хэш-идентификатор замороженного дерева и т. Д.).
  7. Запишите хеш-идентификатор, полученный при записи нового коммита. Хэш-идентификатор этого нового коммита входит в текущее имя ветки. Если имя ветви не существовало до этого момента, то теперь оно существует.

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

(Если у вас есть хотя бы один коммит, вы можете прикрепить столько имен, сколько вам нужно, к одному коммиту. Если у вас более одного коммита, вы можете прикрепить столько имен, сколько вам нужно, к каждому коммиту, хотя большинство коммитов не ' Мне не нужны никакие имена, прикрепленные к ним. Git находит их, работая в обратном направлении от более позднего коммита. Только последнему коммиту - кончику ветви - когда-либо нужно имя, так что Git может найти его, не найдя сначала более поздний коммит.)

Другие вопросы по тегам