Как git поддерживает коммиты из удаленной ветки? - PullRequest
0 голосов
/ 17 апреля 2019

enter image description here

Это git merge сценарий. Когда я объединяюсь, создается New merge commit, поэтому, если я вернусь с New merge commit, я смогу увидеть запланированную историю всех коммитов Master и Feature до Common base. Вот сценарий, который я не понимаю: если я удаляю ветку Feature, я думаю, что коммиты ветки Feature будут удалены, но реальность такова, что когда я стою на New merge commit, после удаления ветки Feature я могу все еще вижу Feature ветвь коммитов, когда я набираю git log. Как это возможно? Я что-то ошибаюсь?

1 Ответ

3 голосов
/ 17 апреля 2019

В комментариях упоминается, что ветвь - это просто заметка, закладка.

Если вы немного покопаетесь в каталоге .git (который я рекомендую вам для образовательных целей), вы будетесм. каталог refs/heads.Он будет содержать один файл для каждой ветви, который у вас есть локально (удаленные ветви хранятся в refs/remotes).

Если вы откроете один из этих файлов, вы увидите, что он содержит одну строку: хешпоследний коммит указывает на ветвь.

Удаление ветки эффективно просто удаляет соответствующий файл в refs/heads.Вот почему удаление ветви не влияет на коммиты "ветви" (коммиты на самом деле не принадлежат ветви).

В результате вы также можете (опять же, только в образовательных целях, яКонечно, не рекомендуется делать это в ежедневном рабочем процессе) создайте ветку foo, создав файл refs/heads/foo с содержимым полного хеша коммита, на который вы хотите указать ветку.

В качестве второго результата, как только ветвь объединяется, нет смысла держать ее «на всякий случай».

...