git graph что обозначают линии и звездочки?

Попытка понять git немного подробнее. Что означают линии и точки на графике вывода git log? Почему точки только слева для его части и только справа для другой части? Это потому, что я выполнил команду из определенной ветки? Будет ли это мастер другой формы? Вытягивающее слияние показано по-другому?

введите здесь описание изображения


person Costa Michailidis    schedule 10.03.2014    source источник


Ответы (3)


Звездочки обозначают коммиты, а линии родительские дочерние отношения.

Так что в основном это означает, что у вас есть две ветви (назовем их левой и правой). Что ты много работал над левым, потом над правым, ты слил правое в левое, дальше работал над правым и снова слил.

В случае, если вы выполняете слияние, они используют некоторое искусство ASCII, чтобы обозначить, что правильный все еще активен. Это одна из причин, по которой я предпочитаю tig, у которого более чистый синтаксис.

person Willem Van Onsem    schedule 10.03.2014
comment
Я никогда не слышал о тиге - это здорово. Похоже, это главная страница: jonas.nitro.dk/tig - person Rory Hunter; 11.03.2014
comment
Потрясающий! Вау, в какой ветке сделан коммит, это действительно хорошая информация, вот еще один вопрос: stackoverflow.com/questions/22313510/ - person Costa Michailidis; 11.03.2014

Это важно знать, особенно в 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 (что важно).

person eddiemoya    schedule 10.03.2014

Звездочки — это коммиты (справа), линии соединяют коммиты (т. е. показывают соединения).

person vonbrand    schedule 10.03.2014