4

Предиcтория фейла:

В origin master было 10 нормальных коммитов. Понадобилось 3 коммита извлечь из истории, а потом перенести в отдельный баранч

Вот мои действия

git checkout master
git branch test
git rebase -i HEAD~10 //удалил 3,9 и 10 коммит (условно hash: aaaaa,bbbbb,ccccc)
git push -f origin master
git checkout test
git rebase -i HEAD~10 //удалил 4,5,6,7,8 тоесть промежуточные

В это время мастер пошел вперед. Решив что пора вылить ветку test в origin, но что бы потом сливать ветку было проще решил подлить в нее мастер но ребейсом

git checkout test
git pull --rebase origin master

Расчитывал что мои три коммита просто перетянуться вверх истории, так как предок-коммит был. Но после кучу странных конфликтов в истории отсуствует один коммит (aaaa)

Два вопроса

  1. В чем я ошибся и почему все так сломалось?
  2. Что делать, как востановить утерянный коммит?
duhon
  • 1,155
  • как пофиксить я уже понял, все просто git reflog, находим состояние проекта до пула (например 3 шага назад) и делаем git reset --hard HEAD@{3}. Можно также и брачь временный создать что бы поразбераться. Но так и незнаю как правильно подлить без мерджа новые комиты в ветку – duhon Oct 27 '15 at 13:24
  • git cherry-pick не? – Dmitriy Simushev Oct 27 '15 at 13:27
  • git cherry-pick ну эта команда укороченная версия git rebase только для одного коммита у меня конечно всего три комита, но на практике так легко не бывает – duhon Oct 27 '15 at 13:43
  • вы в мастер форсом пушнули ? – zb' Oct 27 '15 at 18:16
  • да, я форсом в мастер пушнул – duhon Oct 28 '15 at 13:21
  • Чтобы лучше понять гит: http://habrahabr.ru/post/268951/ – IonDen Oct 28 '15 at 13:40
  • так я книгу по гиту прочитал и понял как работает гит, но на нюансах запутаться легко. Могу логически расписать что я сделал
    git pull -- rebase origin master это: 
    git fetch origin master; 
    git rebase HEAD origin/master; 
    
    

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

    – duhon Oct 28 '15 at 14:39

1 Answers1

5

Ответ для второго пункта: все просто git reflog, находим состояние проекта до пула (например 3 шага назад) и делаем git reset --hard HEAD@{3}. Можно так же и бранч временный создать, чтобы поразбираться.

duhon
  • 1,155
  • а для первого пункта? – 4per Nov 14 '17 at 13:13
  • 1
    @4per ответ для первого пункта: из за того что мастер ушел вперед и в этих комитах были удалены файлы в которые вносит изменение коммит 3 (ааааааа) и поэтому при ребейсе он наверно проигнорировался. – duhon Nov 15 '17 at 10:21