#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. мэтт: Несмотря на то, что это мой действующий сайт, я не могу сделать это без вмешательства пользователей, чего я пытался избежать. Но вы правы: если больше ничего не сработает, это то, что мне придется сделать. Вероятно, я смогу сократить время простоя до пары минут.