Попытка понять git немного подробнее. Что означают линии и точки на графике вывода git log? Почему точки только слева для его части и только справа для другой части? Это потому, что я выполнил команду из определенной ветки? Будет ли это мастер другой формы? Вытягивающее слияние показано по-другому?
git graph что обозначают линии и звездочки?
Ответы (3)
Звездочки обозначают коммиты, а линии родительские дочерние отношения.
Так что в основном это означает, что у вас есть две ветви (назовем их левой и правой). Что ты много работал над левым, потом над правым, ты слил правое в левое, дальше работал над правым и снова слил.
В случае, если вы выполняете слияние, они используют некоторое искусство ASCII, чтобы обозначить, что правильный все еще активен. Это одна из причин, по которой я предпочитаю tig
, у которого более чистый синтаксис.
Это важно знать, особенно в stackoverflow, поскольку многие вопросы и ответы будут представлены в виде репрезентативных графиков, подобных приведенным ниже.
Каждая звездочка — это коммит, строки ведут вниз к коммиту каждого родителя. Коммит также является родительским коммитом, если он находится непосредственно под другим коммитом.
* D (master)
* C
* B
* A
В приведенном выше примере A — это первая фиксация, а B — вторая, и так далее — родословная D->C->B->A
. Эта часть очевидна, но допустим, вы делаете ветку на основе B и добавляете новый коммит.
* D (master)
* C
| * E (dev)
|/
* B
* A
Итак, теперь у нас есть две ветки, master
и dev
. Предками D (master)
являются D->C->B->A
, а предками E (dev)
являются E->B->A
.
Если вы видите две разделенные строки, это означает, что две фиксации этих строк приводят к тому, что обе считают эту общую фиксацию родителем - в приведенном выше случае B
является родителем как для E
, так и для C
.
Допустим, вы затем добавляете еще один коммит в ветку dev
, а затем решаете, что готовы объединить dev
в master
.
* G (master)
|\
* | D
* | C
| * F (dev)
| * E
|/
* B
* A
На приведенной выше диаграмме показано, что вы добавили коммит F
сразу после E
(посмотрите, как звездочки расположены прямо друг над другом/под другим). Затем вы проверили ветку master
и объединились с dev
. Это создало коммит слияния, и здесь он называется G
.
Выше я объяснил, как линии, отделяющиеся от одного и того же коммита вверх, означают, что туда, куда ведут эти линии, два коммита считают первый своим общим родителем. Однако в данном случае G
имеет две строки, ведущие в. Это означает, что у него имеет два родителя. Это фиксация слияния.
На последней диаграмме вы заметите, что коммиты (звездочки) находятся на разных строках.
* | D (master)
* | C
| * F (dev)
| * E
Все эти коммиты теперь объединены, но D
и C
были созданы в другой ветке, чем F
и E
. Сторона, на которой стоит звездочка, обозначает, к какой ветке принадлежит коммит. D
было создано в ветке master, а E
— в ветке dev.
Эти объединенные истории могут быть очень запутанными, они не всегда такие аккуратные и упорядоченные, как у вас сейчас. Вы можете позаботиться о том, как выглядит ваша история, и можете попытаться изменить ее, выполнив такие действия, как слияние с --no-ff или --ff-only или выполнение перебазирования. Я не буду вдаваться в подробности, скажу только, что это способы, которыми люди могут управлять тем, как выглядит график истории git (что важно).
Звездочки — это коммиты (справа), линии соединяют коммиты (т. е. показывают соединения).