У меня была проблема, когда я пытался нажать «Ваша ветвь впереди« origin / master »на 3 коммита».
Это не «проблема»;это обычный вывод из git (обычно git status
), сообщающий, что у вас есть локальные изменения, которые могут быть синхронизированы с удаленным.На данный момент правильная процедура, если вы хотите обновить пульт с вашими локальными изменениями, это
git push
Если это вызвало сообщение об ошибке, то нам нужно увидеть , что сообщение для дальнейшей консультации.
Я сделал git reset --hard origin / master, и это решило эту проблему.
То, что вы сказали git сделать здесь, - это синхронизироватьтекущая локальная ветвь (master
) с удаленной ветвью - удаление всех локальных изменений.Это удаляет сообщение «ветка впереди» именно потому, что это означает, что больше нечего нажимать.
Из комментариев было предложено использовать reflog, и вы добавили вывод reflog.Теперь то, что показывает этот вывод, является историей каждого перемещения HEAD
ref.Обычно это из-за таких вещей, как фиксация, проверка или, в данном случае, сброс.Таким образом, строка
edc9596 HEAD@{1}: reset: moving to origin/master
показывает конкретно, когда вы сбрасываете локальный master
, чтобы он соответствовал удаленному отслеживанию ref origin/master
, и что вы, вероятно, хотите сделать, это переместить локальный master
обратно в состояниедо этого
Сложные вещи, однако, после этого вы сделали еще один коммит, показанный как
5e63abf (HEAD -> master, origin/master) HEAD@{0}: commit: <U+009B>23_02_2019
Прежде чем продолжить, я хочу подчеркнуть - следующие команды основаны на приведенном выше журналевыход.Если с тех пор вы сделали что-то, что добавило бы к журналу рефлексов - например, больше коммитов, проверок и т. Д. - тогда вам нужно перезапустить git reflog
и настроить соответствующие команды, которые вы используете.
В частности, ям будет ссылаться на HEAD@2
;Это связано с тем, что в выводе reflog HEAD@1
относится к результату reset
, поэтому вы хотите перейти на еще на одно состояние назад - и HEAD@2
- это состояние до HEAD@1
.
Итак:
Если сделанный вами коммит после сброса представляет новые изменения, которые необходимо сохранить, то вы скажете:
git branch temp
git reset --hard HEAD@{2}
git rebase --onto master origin/master temp
git checkout master
git merge --ff-only temp
git branch -d temp
Если коммит не нужен - если онбыла просто попытка восстановить некоторые другие локальные изменения или что-то - тогда вам нужно только
git reset --hard HEAD@{2}