Коммит Git больше не отображается в журнале после `git pull`

Вчера я клонировал репозиторий Git (размещенный на экземпляре GitLab). HEAD был каким-то коммитом (26337128). Сегодня я сделал git pull, но этот коммит больше не отображается в журнале (git log | grep 26337128 и git branch -a --contains 26337128 оба ничего не дают). Почему?

Обратите внимание, что коммит по-прежнему виден с помощью git show 26337128 (и в веб-интерфейсе GitLab), я не делал никаких локальных изменений и все еще нахожусь в ветке по умолчанию.

Обновлено: Вот вывод git reflog --all, но я не знаю, как его интерпретировать:

8d0f83b389ec (HEAD -> drm-tip, origin/drm-tip, origin/HEAD) refs/heads/drm-tip@{0}: pull (finish): refs/heads/drm-tip onto 8d0f83b389ec64b9f7f9b2ee241fc352346868f1
8d0f83b389ec (HEAD -> drm-tip, origin/drm-tip, origin/HEAD) HEAD@{0}: pull (finish): returning to refs/heads/drm-tip
8d0f83b389ec (HEAD -> drm-tip, origin/drm-tip, origin/HEAD) HEAD@{1}: pull (start): checkout 8d0f83b389ec64b9f7f9b2ee241fc352346868f1
8d0f83b389ec (HEAD -> drm-tip, origin/drm-tip, origin/HEAD) refs/remotes/origin/drm-tip@{0}: pull: forced-update
26337128da9b refs/heads/drm-tip@{1}: clone: from https://gitlab.freedesktop.org/drm/tip
26337128da9b refs/remotes/origin/HEAD@{0}: clone: from https://gitlab.freedesktop.org/drm/tip
26337128da9b HEAD@{2}: clone: from https://gitlab.freedesktop.org/drm/tip
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
50
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Трудно сказать. Возможно, ваш коммит уже был в исходной версии (светлые умы исправляют те же ошибки). Вам придется копать глубже (посмотрите на ветки, например, с помощью gitk).

Если вам все еще нужен этот коммит или вы хотите понять, как была изменена история, вы можете проверить журнал обновлений с помощью git reflog, чтобы увидеть, какие изменения произошли в репозитории.

Поскольку я был очень удивлен, я просто хочу знать, что произошло. Я добавил полный вывод рефлога.

vinc17 09.08.2024 16:55
Ответ принят как подходящий

Коммит, о котором вы спрашиваете, присутствует в вашем локальном репозитории; он указан в трех нижних строках рефлога.

Что касается того, что произошло: ну, было бы полезнее, если бы вы сказали git reflog --date iso, чтобы мы могли видеть, сколько времени прошло между вашими действиями; но, судя по рефлогу и небольшим подсказкам, которые вы нам дали, очевидно, между вашим вчерашним клоном и сегодняшним извлечением кто-то выполнил принудительное нажатие (обратите внимание на «pull: принудительное обновление») — и поэтому 26337128 был вырван переписанной ветки.

Конечно, люди не должны делать подобные вещи (принудительно отправлять в общую ветку). Но, очевидно, ваш пульт gitlab не настроен для предотвращения этого.

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

Хорошо, проблема объясняется принудительным нажатием, но я думал, что это категорически не рекомендуется (т. е. никогда не используется, за исключением исключительных причин, таких как юридические вопросы). Более того, о вынужденном толчке командование git pull даже не предупредило. Настолько плохой дизайн. И тот факт, что удаленный коммит может быть подвергнут сборке мусора, тоже плох (например, если кто-то хочет воспроизвести проблему с соответствующим состоянием исходного кода).

vinc17 09.08.2024 17:18

«принудительный толчок объясняет проблему, но я думал, что это категорически не рекомендуется» Да, именно это я сказал в своем ответе. Предполагается, что один из них будет предупреждать всех остальных пользователей (вручную) при принудительном нажатии на общую ветку. Кто-то повел себя плохо.

matt 09.08.2024 17:24

Я не могу вдаваться в подробности, не видя результата git log --all --graph --oneline --decorate. Мой ответ, как я уже сказал, основан на очень малой информации, которую вы предоставили. Возможно, вы захотите проконсультироваться по адресу stackoverflow.com/questions/12063345/…, где ваш вопрос, возможно, является дубликатом.

matt 09.08.2024 17:28

Что ж, выходные данные git log --all --graph --oneline --decorate имеют 1581190 строк, так что это, вероятно, слишком велико, чтобы их предоставить. Но 26337128 не может быть найден в выводе.

vinc17 09.08.2024 17:28

При поиске я не увидел stackoverflow.com/questions/12063345/… в названии которого даже не упоминается git pull (поэтому он не был найден в поиске). Кстати, в этом вопросе упоминается «принудительное обновление», которого я не видел. Но, глядя на ответ, текст «принудительного обновления» просто появляется в середине подробного вывода, поэтому едва заметен.

vinc17 09.08.2024 17:46

Извините, я имел в виду «принудительное обновление», которое должно появиться с git pull (как упоминалось в другом вопросе). Я не видел этого текста. Для чего-то, что люди не должны делать, я бы ожидал какого-то выделенного текста и даже сбоя без возможности принимать принудительные обновления (Как отклонить принудительное обновление GIT на стороне клиента при выполнении git fetch или git тянуть? могло быть решением, но это не глобально и не по умолчанию).

vinc17 09.08.2024 18:32

Другие вопросы по теме