Git: не удается устранить различия между master и origin / master

#git #github

#git #github

Вопрос:

Недавно я изменил свой код для размещения на Github и развертывал его на своем реальном сайте с помощью:

 git pull origin master
  

Где для origin установлено значение https://github.com/myname/myproject .

Все работает нормально, за исключением состояния git, которое показывает:

 # On branch master
# Your branch is ahead of 'origin/master' by 74 commits.
#   (use "git push" to publish your local commits)
  

Это неверно — я не делал никаких коммитов, которые нуждаются в публикации. Если я попытаюсь просмотреть детали с помощью git diff master origin/master , я увижу большое количество перечисленных файлов. Однако я не вижу, откуда взялись эти изменения: взяв файл, который я хорошо знаю, и просмотрев его историю, я вижу, что версия, показанная git log , в точности соответствует версии на Github.

Вещи, которые я пробовал, которые не сработали:

 git fetch origin master:master
  

Я ожидал, что это приведет к удаленному мастеру к моему локальному мастеру. Но это никак не повлияло на статус.

 git reset --hard origin/master
  

Это фактически сломало мой сайт, проверив какую-то другую версию кода. Я не знаю, какой именно. Мне пришлось выполнить экстренное git pull origin master восстановление, которое (к счастью) вернуло систему в рабочее состояние, но оставило мой статус в этом нестабильном состоянии.

Кто-нибудь может помочь?

Кстати, я сейчас прочитал, что использование git pull в качестве механизма развертывания считается опасным, но я действительно не понимаю почему, и я не нашел явно лучшего способа сделать это в контексте Github — я открыт для предложений!

(обновлено в ответ на комментарий: вот ответ на git remote show origin 🙂

 * remote origin
  Fetch URL: https://github.com/myname/myproject
  Push  URL: https://github.com/myname/myproject
  HEAD branch: master
  Remote branches:
    fixes8p03 tracked
    fixes8p07 tracked
    master    tracked
    rfc2188   new (next fetch will store in remotes/origin)
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)
  

Комментарии:

1. В сообщении говорится, что делать. — используйте «git push» для публикации ваших локальных коммитов

2. Я не понимаю, почему у вас должен быть этот невидимый журнал. Однако я знаю, что иногда мне трудно разобраться в журналах при смене среды (с unix на dos для instant), потому что это нарушает права доступа к файлам. Может быть, это вам поможет? 🙂

3. Может быть, также проверить git remote show origin на наличие каких-либо странностей? В вашей конфигурации может быть отключен какой-то элемент.

4. Используя git log , проверьте, какие коммиты вы видите на своем рабочем сервере : git log --oneline --graph master origin/master

5. @evolutionxbox: итак, у меня есть правильный код в origin / master, правильный код в моем рабочем дереве, и система сообщает мне, что в моем локальном master неверный код. Конечно, нажатие предположительно неправильного кода — это последнее, что я хочу делать прямо сейчас?

Ответ №1:

Ваша удаленная origin/master ветка не обновлялась и отстала от локальной master ветки. Они не разошлись, но удаленная ветвь на 74 коммита отстает от локальной. У вас есть два варианта:

Если новые изменения в локальной ветке сделаны специально, просто отправьте их в origin/master :

git push origin master

Если вы по какой-либо причине не хотите изменений, вы можете сбросить свою master ветку в удаленное состояние. Это означает, что вы перезаписываете master с origin/master помощью. Внимание, вы потеряете все 74 изменения, которые вы совершили ранее:

git reset --hard origin/master

Комментарии:

1. Однако они не разошлись. Кажется, что локальная ветвь просто опережает исходную ветвь.

2. На самом деле, я думаю, Дениз прав: они разошлись, и я не знаю почему. Вот в чем дело: код в origin / master и в моей извлеченной версии одинаковый и является правильным. Но код в локальном master неверен. Поэтому я не решаюсь выполнить git push, и когда я попробовал «git reset —hard», я получил неправильную версию кода в моей проверенной версии.

3. Значит, истина находится только на сервере? Затем удалите локальную рабочую папку и извлеките новую рабочую папку с сервера.

4. мэтт: Несмотря на то, что это мой действующий сайт, я не могу сделать это без вмешательства пользователей, чего я пытался избежать. Но вы правы: если больше ничего не сработает, это то, что мне придется сделать. Вероятно, я смогу сократить время простоя до пары минут.