Это определенно немного странно. Я думаю, что проблема здесь чувствительна к регистру:
Когда вы запускаете git pull
и он запускает git fetch
, вы получаете это как одну из строк вывода:
* [new branch] v2.1.10-AF -> origin/v2.1.10-AF
Запуск git status
, однако, говорит:
Your branch is up to date with 'origin/v2.1.10-af'.
Обратите внимание, что для вывода fetch
используется верхний регистр: origin/v2.1.10-AF
. Вывод status
использует строчные буквы: origin/v2.1.10-af
.
К Git, это два совершенно разных имени, а Git сохраняет некоторые из этих данных в вашем хранилище как текстовые строки внутри обычных текстовых файлов, где они остаются под разными именами. Но Git хранит некоторые другие данные об именах филиалов и именах удаленного отслеживания в именах файлов , которые хранятся в вашей операционной системе.
На вашем компьютере , файл с именем .git/refs/remotes/origin/v2.1.10-AF
- это тот же файл , что и файл с именем .git/refs/remotes/origin/v2.1.10-af
, хотя один из них является прописным, а другой - строчным.
Проблема в другом Другими словами, Git считает, что это разные имена (и они различаются на Linux машинах, таких как сервер GitHub), но ваша ОС иногда настаивает на том, что они имеют одно и то же имя .
Ваш git push
имеет сервер GitHub, создающий или обновляющий имя в нижнем регистре v2.1.10-af
. Это оставляет заглавное имя, v2.1.10-AF
, 13 коммитов позади. Pu sh теперь завершен, и все на GitHub обновлено.
Затем ваш pull
получает оба имени - v2.1.10-af
и v2.1.10-AF
- и сохраняет два разных коммита sh Идентификаторы под этими двумя именами, но ваша ОС настаивает на том, что они то же самое имя. Старое значение v2.1.10-AF
в верхнем регистре перезаписывает правильное, и git status
неожиданно говорит, что вы снова делаете коммит на 13.
Чтобы убедиться, что это так, используйте веб-интерфейс GitHub (или аналогичный) для просмотра GitHub и посмотри, какие у тебя имена. Пожалуйста, сделайте это сначала!
Решение состоит в том, чтобы изменить имена и / или избегать смешивания прописных и строчных букв. Например, вы можете использовать только строчные буквы, указав серверу GitHub удалить имя в верхнем регистре:
git push --delete origin v2.1.10-AF
или удалив вариант в верхнем регистре через веб-интерфейс. Теперь у GitHub будет только строчный вариант. Затем, в вашем собственном репозитории, введите go и найдите любые варианты имени в верхнем регистре в .git/refs/remotes/origin
и удалите или переименуйте их в варианты в нижнем регистре (удаление их полностью безопасно, поскольку git fetch
создаст их заново, если это необходимо).