Почему моя локальная ветка git исчезает каждый раз, когда я создаю новую? - PullRequest
0 голосов
/ 17 октября 2018

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

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

Почему это?

1 Ответ

0 голосов
/ 18 октября 2018

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

$ 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.

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

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

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

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

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

...