Я часто нахожусь в положении, когда я хочу получить конкретный refspec из git remote, не давая ему имя локально.Команда, которую я обычно использую для этого, имеет вид:
git fetch <remote-url> refs/x/y/z && git checkout FETCH_HEAD
Большую часть времени это работает как положено.То есть я в конечном итоге в состоянии отдельного заголовка при коммите, на который ссылается refspec.Однако примерно раз в неделю команда завершается без ошибок, но в итоге я получаю странный древний коммит где-то в цепочке предков, о котором я не просил.
пример вывода:
remote: Counting objects: 25525, done
remote: Finding sources: 100% (396/396)
remote: Total 396 (delta 129), reused 376 (delta 129)
Receiving objects: 100% (396/396), 167.79 KiB | 2.33 MiB/s, done.
Resolving deltas: 100% (129/129), completed with 68 local objects.
From <remote-url>
* branch refs/x/y/z -> FETCH_HEAD
Checking out files: 100% (26834/26834), done.
Previous HEAD position was ...
HEAD is now at 8315f9bc89 Some extremely old commit that is definitely not refs/x/y/z
Выполнение точно такой же команды сразу после этого дает мне коммит, который я ожидал получить в первую очередь.
Что здесь может пойти не так?Учитывая, что он говорит, что устанавливает FETCH_HEAD на то, что я просил, и не возвращает ошибку, я даже теоретически не понимаю, почему он в следующий момент указывает на неправильный коммит.
Какие шагибудет рекомендовано отладить это?Единственный шаблон, который мне удалось увидеть, это то, что это всегда точно такой же старый коммит, который проверяется, когда он идет плохо.Он не выглядит особенным в каком-либо конкретном смысле, за исключением того, что он выглядит как одно из первых изменений в репо с тегом.