Отмена плохой тяги - PullRequest
       1

Отмена плохой тяги

46 голосов
/ 25 ноября 2010

Прежде всего, Git отстой.Я знаю, я знаю, это должно быть лучше, чем нарезанный хлеб, но это отстой.Это все равно что пытаться побриться бензопилой: одна небольшая ошибка, и везде кровь и зубы.Возможно, если бы я мог на самом деле провести точное различие между головой, рефом, коммитом, веткой, стеблем, гнагелем и одержимым, некоторые из них могли бы быть немного проще, но обычному смертному всего с 10 годамиопыт SVN, Perforce и RCS, все это выглядит как довольно чокнутая черная магия.

Теперь по некоторым причинам, git pull никогда не работал для меня.Я получаю сообщение об ошибке из 10 строк, которое до сих пор было таким же полезным, как и слово «ошибка».Поиск в сообщении об ошибке привел к появлению широкого спектра предложений, которые имели общий смысл только с тем фактом, что они никак не влияли.Но это не сегодняшняя проблема: я привык набирать git pull origin branch.

Сегодня я переключался между двумя ветвями, «master» и «lounge», и в тот момент я был вмастер ветка.Я хотел получить последние изменения из удаленного хранилища в локальное, но я набрал опечатку.Вместо того, чтобы писать git pull origin master, я написал git pull origin lounge и затем, не задумываясь, набрал правильную команду.

Нет никаких свидетельств первого (плохого) извлечения журнала, только два слияния с мастером:

commit 0c6be9569bab0581244ea8603bf2edfee82cdd7b
Merge: 43fdec5... db09f0d...
Author: Malvolio <info@xcompanyx.com>
Date:   Wed Nov 24 20:38:58 2010 -0500

Merge branch 'master' of github.com:xcompanyx/xRepositoryX

commit db09f0d79d744d6a354142041b47ff5d748999f3
Merge: 81b6c3d... fc73e25...
Author: Malvolio <info@xcompanyx.com>
Date:   Wed Nov 24 17:38:16 2010 -0800

Merge branch 'master' of github.com:xcompanyx/xRepositoryX

commit 81b6c3d04b7c464f8750a56282635526a5ef83a1
Author: Michael <info@xcompanyx.com>
Date:   Wed Nov 24 17:38:07 2010 -0800
    the last commit I did

Но файлы, недавно созданные в ветке lounge, есть в моем хранилище.

Итак, я облажался, верно?Должен ли я просто сжечь свой репозиторий, снова клонировать пульт, повторно применить все невыпущенные изменения вручную и записать его на счет Git sucking или есть какое-то заклинание, которое я могу повторить, чтобы сделать все это лучше?Поможет ли это, если я пожертвую козу?

Ответы [ 2 ]

40 голосов
/ 25 ноября 2010

Используйте git reflog, чтобы увидеть, на что указала ваша ГОЛОВКА, прежде чем вы облажались.

Вы должны увидеть что-то вроде:

48ab8d HEAD@{0}: pull: Fast-forward
a34bda HEAD@{5}: commit: my last commit message

Теперь направьте вашу главную ветвь назадсовершить до плохой тяги:

git reset --hard a34bda

Готово.Как будто этого никогда не было.

6 голосов
/ 25 ноября 2010

Я не могу полностью понять вашу историю из вашего вопроса, но в целом, если вы сделаете два слияния (вытягивание - это слияние), удалить одно из них совершенно просто.

- 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...