Git говорит, что локальная ветка находится за удаленной ветвью, но это не
Сценарий:
- Я создаю новую ветку
- взломать его
- передать его
- нажмите на него
- взломать его еще немного
- еще раз подтвердить
- попробуйте снова нажать
Git отвечает:
Обновления были отклонены, поскольку конец вашей текущей ветки его удаленный аналог. и др.
Я единственный, кто взламывает эту ветку - никто другой не прикасается к ней. Удаленная ветвь фактически находится за локальной ветвью. Мне вообще не нужно было тянуть.
(И если я нажимаю, Git сообщает о конфликтах между ними и заставляет меня объединить ветвь в себя)
Почему это (вероятно) происходит? И как я могу диагностировать/исправить это?
Чтобы быть ясным, я нигде не разветвляюсь, и никто больше не работает над ним:
Remote: Commit A -------- Commit B
Local: Commit A -------- Commit B -------- Commit C
C - прямое продолжение B, не связанное с ветвлением. Но Git считает, что C - ветвь A:
Remote: Commit A -------- Commit B
------- Commit C
/
Local: Commit A -------- Commit B
Это не так; это прямое продолжение B.
Ответы
Ответ 1
Вероятно, вы переписали историю? Ваша локальная ветвь отклонилась от той, что была на сервере. Запустите эту команду, чтобы лучше понять, что произошло:
gitk HEAD @{u}
Я настоятельно рекомендую вам попытаться понять, откуда эта ошибка. Чтобы исправить это, просто запустите:
git push -f
-f
делает это принудительным нажатием и перезаписывает ветвь на сервере. Это очень опасно, когда вы работаете в команде. Но
поскольку вы сами по себе и уверены, что ваше местное состояние верное
это должно быть хорошо. Вы рискуете потерять историю фиксации, если это не так.
Ответ 2
Это случилось со мной, когда я пытался нажать ветку разработки (я использую поток git). У кого-то были текущие обновления для мастера. исправить это я сделал:
git co master
git pull
Что вызвало эти изменения. Тогда,
git co develop
git pull
Что ничего не делало. Я думаю, что ветка разработки уже нажата, несмотря на сообщение об ошибке. Теперь все обновлено и никаких ошибок.
Ответ 3
Чтобы диагностировать его, выполните этот ответ.
Но, чтобы исправить это, зная, что вы только меняете его, выполните:
1 - резервное копирование проекта (я сделал только файлы в папке git,./src)
2 - git pull
3 - восстановить резервную копию по многим "беспорядочным" файлам (с индикаторами слияния)
Я пробовал git pull -s recursive -X ours
, но не работал так, как я хотел, это может быть вариант tho, но резервное копирование сначала!!!
Убедитесь, что различия/изменения (в git gui) отсутствуют. Это мой случай, нет ничего, чтобы слиться вообще, но github продолжает говорить, что я должен слиться...
Ответ 4
Решение очень простое и работает для меня.
Попробуйте следующее:
git pull --rebase <url>
затем
git push -u origin master