Есть ли инструмент, чтобы git показывать "отдельные головы" на графике?

Я часто ссылаюсь на git log --graph --decorate --oneline --all --full-history, чтобы увидеть текущее состояние моих ветвей, но в нем не отображаются отдельные главы/анонимные ветки. Есть ли способ получить отдельные головы, чтобы появиться на этом графике?

Я знаю, что существует git reflog, но это довольно сложно прочитать, поскольку нет структуры - все, что вам нужно продолжить, - это сообщение о фиксации, которое все еще может быть WIP, если я еще не закончил фиксацию.

Некоторая предыстория (это не обязательно, чтобы ответить на вопрос, но поможет объяснить ее мотивацию): Я пользователь Mercurial, и мой рабочий процесс связан с большим количеством анонимных ветвлений. Я часто использую hg heads для проверки этих головок, а часто hg rebase для разделения или объединения ряда коммитов на основе того, что имеет смысл для простого понимания кода.

В то время как я привык к использованию git, я часто встречаюсь с отдельными головами, когда, например, я переустанавливаю некоторые коммиты из ветки, чтобы создать новую ветку. Найти эти отдельные головы раздражает git reflog, и, честно говоря, немного страшно, что они просто исчезают из обычного git log. Я даже забыл о старых коммитах таким образом и должен был выкопать их из git reflog через день или два позже. В Mercurial эти коммиты останутся анонимными, и мне напомнят, что мне нужно их закончить.

Ответ 1

Похоже, вы пытаетесь использовать рабочий процесс, который не совсем соответствует тому, как работает git.

Прежде всего, "отсоединенная голова" в git не совпадает с концепцией Mercurial "головы". git имеет ровно один HEAD, который является только зафиксированным фиксатором. "Отдельно" означает, что в настоящее время вы не проверили филиал. Поэтому, когда вы создаете фиксацию, она не будет связана с веткой, и она будет потеряна при проверке другой фиксации.

В Git каждое обязательство, которое вам нужно, должно быть доступно из какой-либо ветки. Нет такой вещи, как "анонимная ветка", поэтому git предупреждает вас, когда совершает на отдельной голове. Фиксирование на отдельной голове - это как выделение объекта, а затем отбрасывание указателя; это возможно, но почти никогда, что вы хотите сделать. Помните, что ветки в git легки и могут быть эфемерными. Просто создайте ветвь перед фиксацией, чтобы снова найти свои фиксации.

Если вы действительно хотите увидеть структуру своего репозитория, включая коммиты, на которые ссылаются только ссылки, вы можете использовать:

git log --graph --decorate $(git rev-list -g --all)