2015-06-13 6 views
7

Недавно на работе мы потеряли код в проекте под управлением версии с помощью git (и частного репозитория github).Как можно вернуть фиксацию также как фиксацию слияния?

Я использовал git bisect, чтобы найти виновную совершить, и я очень удивлен, обнаружив, что смотрели, как Revert совершить, но и имел два родителей, как слияние совершает:

commit b5f97311eea2905baf8a96fddec22321d952f05c 
Merge: 8cc7371 131d463 
Author: Bob <[email protected]> 
Date: Fri May 22 19:42:25 2015 +0200 

    Revert "ISB-CPW-3627 - Mise en place du calage des filtres DS1/DS2/DS3/DS4" 

    This reverts commit 8cc7371e7133b68db95ac8e9aeb730d7889a1166. 

Эта проблема была решена путем создания новую ветку от фиксации предка и применение некоторых патчей поверх этой новой ветки.

Так что мне не нужна помощь, чтобы исправить это, я просто хочу понять, как можно вернуть фиксацию, также может быть слияние, что произошло и как воспроизвести это странное поведение.

Я попытался воспроизвести его, как это:

  • создать новый филиал в 8cc7371
  • мерзавец вернуться 8cc7371

Это создает Revert совершить с одним родителем (8cc7371), как ожидается.

Автор сценария преступника использует Atlassian SourceTree вместо интерфейса командной строки, поэтому я также попытался использовать функцию возврата в SourceTree и получил тот же результат, что и выше (один родительский).

После выполнения некоторых команд Git на b5f9731, я заметил, что git diff и git show не сообщают тот же набор файлов:

$ git diff b5f9731..8cc7371 --name-only 
=> 2 files : 
    application/sites/frontend/views/scripts/Layout/Foobar/PointsDeVente/index.tpl 
    public/media/design/frontend/css/main-dev.css 
$ git show --oneline --name-only b5f9731 
=> 1 file : 
    public/media/design/frontend/css/main-dev.css 

SourceTree и Github показывают 2 файла.

Вы можете найти как выглядит график: graph.html, и некоторые результаты команды git: misc.html.

Может ли кто-нибудь объяснить, что произошло с b5f9731?

+1

Я добавлю это сообщение в избранное и использую его как пользовательскую ссылку How-To-Ask для вопросов, связанных с Git. –

+0

Как проходит расследование? –

+0

Сегодня я играл с функцией интерактивного перебора SourceTree и не смог воспроизвести проблему. Я полагаю, что эта проблема имеет какое-то отношение к 'git rebase' или' git pull --rebase', но я сдаюсь. Мне не хватает информации, 3 недели назад, когда это случилось, я попросил автора сообщения отправить мне его рефлог для дальнейшего расследования, и он не смог этого сделать. Он работает в другой компании (они работают на лицевой стороне, тогда как моя компания работает на стороне сервера), общение затруднено. Тайна остается: s – Vince

ответ

1

Что приходит на ум:

git revert ... 
# new commit abcdef 
git merge ... 
# new commit fedcba 
git rebase -i HEAD~2 

pick abcdef - the original revert commit 
squash fedcba - the merge commit 

Сообщение берется из abcdef.

Все это приводит к появлению нового b5f9731. У него есть два родителя из фиксации слияния и сообщение из команды revert commit.

+0

Спасибо, это хорошая идея. Я ожидал чего-то более простого, чем интерактивная rebase (потому что автор фиксации является новичком), но, действительно, SourceTree обрабатывает эту функцию. – Vince

+0

@ Ввиду преимуществ графических интерфейсов, они позволяют массовое уничтожение нажатием кнопки (обычно непреднамеренно). –

-1

шагов, чтобы вернуться коммит из местного отделения являются следующим: -

1) Выполните «GIT журнал -1» команду на мерзавец Баше 2) Получить «покончила GUID» сверху команды 3) Выполните команду «Git reset -hard commit GUID» на git bash

 Смежные вопросы

  • Нет связанных вопросов^_^