Отмена плохой нагрузки
Прежде всего, Git отстой. Я знаю, я знаю, это должно быть лучше всего после нарезанного хлеба, но это отстой. Это похоже на попытку сбрить бензопилой: одна небольшая ошибка, и везде есть кровь и зубы. Возможно, если бы я мог точно провести различие между головой, рефлексией, фиксацией, ветвью, стеблем, гнаргелем и whizpoo, некоторые из них могли бы быть немного легче, но обычным смертным с 10 годами опыт SVN, Perforce и RCS, все это выглядит как довольно капризная черная магия.
Теперь по какой-то причине git pull
никогда не работал у меня. Я получаю сообщение о 10-строчной ошибке, которое до сих пор было так же полезно, как и слово "ошибка". В результате сообщения об ошибке появилось множество предложений, которые имели только общий факт, что они не оказали никакого влияния. Но это не проблема сегодня: я привык печатать git pull origin branch
.
Сегодня я переворачивался между двумя ветвями: "мастер" и "гостиная", и в тот момент я был в мастер-ветке. Я хотел получить последние изменения из удаленного репозитория на локальный, но я ошибся. Вместо написания git pull origin master
я написал git pull origin lounge
, а затем, не задумываясь, набрал правильную команду.
Нет никаких признаков первого (плохого) вытягивания в журнале, всего два слияния с мастером:
commit 0c6be9569bab0581244ea8603bf2edfee82cdd7b
Merge: 43fdec5... db09f0d...
Author: Malvolio <[email protected]>
Date: Wed Nov 24 20:38:58 2010 -0500
Merge branch 'master' of github.com:xcompanyx/xRepositoryX
commit db09f0d79d744d6a354142041b47ff5d748999f3
Merge: 81b6c3d... fc73e25...
Author: Malvolio <[email protected]>
Date: Wed Nov 24 17:38:16 2010 -0800
Merge branch 'master' of github.com:xcompanyx/xRepositoryX
commit 81b6c3d04b7c464f8750a56282635526a5ef83a1
Author: Michael <[email protected]>
Date: Wed Nov 24 17:38:07 2010 -0800
the last commit I did
Но файлы, созданные в ветке lounge, находятся в моем репозитории.
Итак, теперь я fscked, не так ли? Должен ли я просто сжечь свой репозиторий, снова клонировать удаленный компьютер, повторно применить все измененные изменения вручную и записать его до Git сосать или есть какое-то заклинание, которое я могу прочесть, и все это улучшится? Помогло бы мне, если бы я пожертвовал козой?
Ответы
Ответ 1
Используйте git reflog
, чтобы увидеть, что указала ваша ГОЛОВА, прежде чем вы ее привинтили.
Вы должны увидеть что-то вроде:
48ab8d [email protected]{0}: pull: Fast-forward
a34bda [email protected]{5}: commit: my last commit message
Теперь, наведите свою главную ветку назад на фиксацию перед неудачным нажатием:
git reset --hard a34bda
Готово. Как будто этого не случилось.
Ответ 2
Я не могу полностью понять вашу историю из вашего вопроса, но в целом, если вы делаете два слияния (вытягивание - это слияние), совершенно просто удалить один из них.
- o - o - o - A - M1 - M2 (master)
/ /
- o - o - o / (origin/lounge)
/
- o - o (origin/master)
Самый очевидный способ:
git checkout master
git reset --hard A
git merge origin/master
Здесь используется локальная кешированная версия оригинала, если вы хотите объединить все, что там есть, используйте git pull origin master
.