Что происходит, когда мы git извлекаем коммит - PullRequest
2 голосов
/ 23 января 2020

Я хотел бы знать, если мы используем git checkout <commit hash>, а коммит находится в нескольких ветвях, как мы узнаем, какой из них получит извлечение?

Я не знал, как сделать это визуально, поэтому я попытался сделать небольшой рисунок, извините за это.
Мне не разрешено публиковать его напрямую, поэтому вот ссылка.
Если у нас есть эти три ветви, то мы git checkout <Commit Z> получим ветку А или Ветка Б? Как это работает? Спасибо!

https://i.stack.imgur.com/Y3wJr.png

Ответы [ 3 ]

4 голосов
/ 23 января 2020

git checkout <commit> устанавливает HEAD при этом коммите, независимо от ветвей, которые могут указывать или не указывать на указанный коммит.

Рабочее дерево соответствующим образом обновляется, и вы получаете то, что называется ОТДЕЛЬНАЯ ГОЛОВА . Дальнейшие коммиты, сделанные с этой точки, действительно примут HEAD в качестве родителя, но ни одна ветвь не будет указывать на него, пока вы не создадите его (или не создадите существующую точку здесь).

4 голосов
/ 23 января 2020

Имя ветки - это просто красивое имя для коммита ha sh (ветвь HEAD, если быть точным).

Проверка коммита ha sh переведет вас в состояние "отсоединенной головы".

Вы можете прочитать об этом здесь или сделать онлайн-поиск состояния отсоединенной головы и что это означает

Коммит (ха sh) может принадлежать ко многим ветвям, и многие заголовки веток могут указывать на один и тот же коммит ha sh.

Проверка фиксации (независимо от того, является ли она заголовком какой-либо ветви) переведет вас в состояние отключенного заголовка.

2 голосов
/ 23 января 2020

Ветка - это ссылка на коммит, который в глазах пользователя является главой ветки. Если вы извлекаете коммит буквально (SHA), вы go переходите в отсоединенное состояние.

...