Почему моя история git похожа на рождественскую елку?

Выполняя git log --decorate --oneline --graph в одном из наших репозиториев незадолго до Рождества, мы обнаружили, что появилась следующая структура (повернутая, чтобы подчеркнуть тонкую праздничную тему):

отредактированный вывод журнала git, повернутый так, чтобы он выглядел как рождественская елка

Как возник этот паттерн в графе коммитов?

Это, конечно, намеренно несколько глупо, но здесь есть интересный момент - часто трудно увидеть, как интерпретировать определенные шаблоны на графике фиксации, когда вы видите их в браузере истории git.


person Mark Longair    schedule 24.12.2012    source источник
comment
Далее: почему мое рабочее дерево похоже на новогоднюю елку?   -  person Amber    schedule 24.12.2012
comment
Далее: почему моя рождественская елка выглядит как git-история?   -  person Keith Thompson    schedule 24.12.2012
comment
Елка была бы неполной без звезд ... * * *   -  person ADTC    schedule 19.11.2017


Ответы (1)


В этом случае ситуация заключалась в том, что на кончике ветки master в одном клоне репозитория произошла непрошедшая фиксация. Затем git pull запускался много раз в одном и том же репозитории в течение периода времени, когда в апстриме выполнялось много новой работы. (В данном случае это произошло из-за автоматизированного сценария, но то же самое может произойти, если разработчик просто многократно обращается к ветке, чтобы поддерживать ее в актуальном состоянии, а не, скажем, перебазировать.)

Каждое нажатие, когда появлялись новые коммиты в восходящем потоке, создавало новый коммит слияния, поскольку всегда была фиксация в master, а не в master восходящем потоке.

В конце концов, история из основной ветки в этом репозитории была отправлена ​​вверх по течению, поэтому другие разработчики увидели, что эта структура в графе коммитов внезапно появилась, когда они в следующий раз извлекли из вышестоящего репозитория.

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

Это одна из причин, по которой люди часто предпочитают использовать git pull --rebase - это упрощает вашу незарегистрированную историю.

Должен отдать должное, мой коллега Мэтью Сомервилл заметил это и выяснил, что происходит.

person Mark Longair    schedule 24.12.2012
comment
Отлично. +1. Мне было известно только о потенциальной проблеме pull --rebase (stackoverflow.com/questions/2590260/), но здесь это действительно поможет. - person VonC; 24.12.2012