Подтвердить что ты не робот

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

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

redacted git log output, rotated to look like a Christmas tree

Как возник этот шаблон в графе фиксации?

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

4b9b3361

Ответ 1

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

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

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

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

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

Чтобы отдать должное, когда это произошло, мой коллега Matthew Somerville заметил это и выяснил, что происходит.