У меня есть git-проект, в котором участник вернулся после долгого отсутствия и сделал уродливое слияние, скорее всего, перед его фиксацией.
В результате история проекта теперь выглядит так:
e6a1272 * Current tip
3750671 * Another (somewhat less ugly) merge
|\
a5df959 | * Progress...
bb55ba3 * | Ugly merge. Catch up on weeks of progress, plus add one line
|\ \
| |/
67d18aa | * Many more commits...
937909a | * ...
094c77a | * Progress...
3ac93c1 | * Progress...
cbca9b4 * | Progress...
|/
1055f06 * An old commit, weeks ago
449cb7c * Another old commit
...
Если честно, это не совсем ужасно, но:
- У него есть паучьи следы в том, что должно быть чистой линейной историей
- github показывает тысячи строк различийдля
bb55ba3
относительно 1055f06
, а не трех линий реальных изменений от 67d18aa
.В интерфейсе github нет простого способа увидеть, что в действительности делает этот коммит. - Точно так же
git log --first-parent
уничтожает большую часть истории - В основном, это просто оскорбляет мои чувства, так как якак чистые истории.
Я уже учил автора, как избежать этой проблемы в будущем, но мой вопрос:
Есть ли способ рассказать github и --first-parent
какой ветке следовать, не переписывая историю?Что-нибудь еще, что я могу сделать, чтобы сделать это чище, без переписывания истории?
(Тем не менее, я, вероятно, мог бы переписать историю, так как проект является частным, и только горстка людей может его увидеть. Так что, возможно,это лучший вариант? Или я слишком навязчиво опрятен, даже не волнуясь об этом?)
О, и связанный с этим вопрос: подобные проблемы, вероятно, будут кусать меня в будущем.Могут ли я установить какие-либо git-хуки, которые предотвратят эту и подобные проблемы?