GIT-как узнать ветку, от которой ответвляется ветка?

поддержка я создаю несколько ветвей (aaa, bbb, ccc) из фиксации. Затем я создаю новую ветку (ddd) из одной из ветвей (bbb) и делаю фиксацию на ней.

затем я нажал все на пульт дистанционного управления. Как другой человек узнает, что новая ветвь (ddd) происходит из какой ветви?

команды git, которые я сделал, были:

git филиал aaa
git филиал bbb
git филиал ccc
git филиал ddd bbb
git checkout ddd
echo 2 > > файл
git добавить файл
git commit-m "2"

и журнал git покажет


* фиксация d259a3b (HEAD, ddd)
|
| 2
|

* commit efb038c (разработка, ccc, bbb, aaa)
|
| 1
|

* commit dd24bb6 (master)

можно даже знать, что ddd был разветвлен от bbb?

спасибо

3 ответов


это действительно невозможно вообще. Записи в Git только1 единственный идентификатор фиксации (SHA-1), на который указывает ссылочное имя (например, ветвь или тег). История этого фиксация определяется исключительно родительскими идентификаторами этой фиксации, которые не записывают имена ветвей. Когда вы нажимаете на пульт, ваша операция "push" отправляет SHA-1 фиксации, которую вы нажимаете (плюс больше SHA-1 для любых других связанных объектов-деревьев и файлов, родительских фиксаций и т. д.), а также содержимое все эти объекты, по мере необходимости, на основе того, что отсутствует на пульте дистанционного управления), и просит пульт установить его ветвь, чтобы указать на новый SHA-1.

другими словами, вы говорите удаленному: "здесь, зафиксируйте 1234567 и установите метку ветви ddd = 1234567". Он может сказать вам: "для этого мне нужно пять других коммитов", один из которых вы обозначили как bbb, но если вы не скажете удаленному " о, Кстати, установите метку bbb для этого другого коммита тоже", тогда у него не будет этого нигде информации.


1Это немного преувеличение: git также отчеты, в reflog, каждый алгоритм SHA-1, который хранится в метке, включая отделения меток. Поэтому можно вернуться к истории лейбла ,чтобы"выяснить, где он начался". Есть два ограничения на это, хотя: reflogs являются чисто локальными, никогда не передаются fetch или push; и reflogs истекает, как правило, через 90 дней в этих случаях (хотя это настраивается и там дополнительные сложности). Так что пока мы говорим, что есть шаг толчка, или позволяем пройти более 3 месяцев, нет никакого способа сказать.


ветви - это не что иное, как указатели на определенную фиксацию. Вы можете видеть только то, из чего commit ddd была ветвь, а не какая ветвь.


ветви-это просто указатели на коммиты. Из-за этого невозможно увидеть, откуда возникла ветвь, кроме наблюдения того, что две ветви имеют одинаковую историю до определенного момента.

для кого-то выше по течению не имеет значения, откуда возникла ветвь, только то, что она содержит определенную фиксацию (или последовательность фиксаций). Это определяет, как / если git может перемотать вперед или объединить ветви вместе.