Git: ветка потеряла свою историю? - PullRequest
3 голосов
/ 18 декабря 2010

Что-то странное произошло - моя ветка разработки потеряла всю свою историю до последнего коммита. Кто-нибудь может подсказать причину?

Последнее, что я сделал - установил, что раздвоил GitX и начал использовать его (в первую очередь для просмотра истории, но также пытался сделать слияние). Но до того, как разработка смотрела от мастера и шла параллельно, ветка 'feature-shape-fill' была объединена в development два раза. Я также сделал git stash в разработке.

Сейчас в git log для ветки развертки просто отображается последний коммит. Ничего не говорит как «отстраненный».

* Я уже боюсь GitX (официальный и этот форк), так как в последние недели что-то странное произошло, двоичный файл .fla не был сохранен за последний вечер в нескольких коммитах. Все текстовые файлы были в порядке, но этот двоичный файл был как 4 коммитов позади. Другие рабочие каталоги вообще не обновлялись при переключении между ветками (я работал в консоли, а git не говорил ни об одной ошибке, это было нормально для него). Донно, если это что-то связано с GITX?

UPD: Похоже, та же проблема, упомянутая здесь http://groups.google.com/group/gitx/browse_thread/thread/71a0f759d115fee5 Вот что я получил:

$ git reflog
157cfca HEAD@{0}: checkout: moving from feature-shape-fill to develop
46a6163 HEAD@{1}: checkout: moving from develop to feature-shape-fill
157cfca HEAD@{2}: commit: Rotated drag tip
7f6c394 HEAD@{3}: commit: TextShapesCanvas is working,
4765eed HEAD@{4}: merge feature-shape-fill: Merge made by recursive.
ed44a2c HEAD@{5}: checkout: moving from feature-shape-fill to develop
46a6163 HEAD@{6}: commit: More tight packaging (thnx to TextLineMetrics),
59b6d2d HEAD@{7}: checkout: moving from develop to feature-shape-fill
ed44a2c HEAD@{8}: merge feature-shape-fill: Merge made by recursive.
67d08b3 HEAD@{9}: commit: Basic grid functionality, need to add text shapes and fix resize-generation
505479c HEAD@{10}: checkout: moving from feature-shape-fill to develop
59b6d2d HEAD@{11}: commit (amend): Simple retrovirus non-optomized algorithm
5ec1b70 HEAD@{12}: commit: Simple retrovirus non-optomized algorithm
b9eaf18 HEAD@{13}: commit: The most ugly suitable version of fill algorithm
757f1b7 HEAD@{14}: checkout: moving from feature-shape-fill-predefined to feature-shape-fill
757f1b7 HEAD@{15}: checkout: moving from feature-shape-fill to feature-shape-fill-predefined
757f1b7 HEAD@{16}: checkout: moving from feature-shape-fill-auto to feature-shape-fill
b8e284f HEAD@{17}: commit: Auto fill first steps
757f1b7 HEAD@{18}: checkout: moving from feature-shape-fill to feature-shape-fill-auto
757f1b7 HEAD@{19}: commit: Test document created, components::TextShape base draft
505479c HEAD@{20}: checkout: moving from develop to feature-shape-fill
505479c HEAD@{21}: checkout: moving from master to develop

Похоже, они не потеряны, но как вернуть мою историю?

Ответы [ 3 ]

2 голосов
/ 18 декабря 2010

На картинке вы видите, что ваша ветка develop отсоединена, если я не ошибаюсь.

Поскольку я понимаю, что он основан на ветке master, вы можете вернуть его в основную ветку:

git rebase master develop

Важно : сначала сделайте резервную копию вашего исходного каталога .git, прежде чем пытаться выполнить вышеизложенное, поскольку я не уверен, что это даст желаемый результат.

Вы также можете получить аналогичный результат, создав временную ветку develop2 из master и добавив в нее develop:

git checkout -b develop2 master
git merge develop

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

0 голосов
/ 19 января 2013

У меня была точно такая же проблема, родительский SHA для коммита как-то не был установлен, и коммит выглядел так, как будто он существовал вне истории проектов. Первый вариант, предоставленный EOL, вернет ваш коммит в историю, но потеряет всю историю веток. (По крайней мере, это помогло мне.) То, что я в конечном итоге делал, просматривало мой reflog последний коммит перед тем, который отправил мою драгоценную ветвь в подвешенное состояние. Линии, которые я видел, выглядели так:

6d79889 HEAD@{24}: checkout: moving from online-payment-processing to gift-certificates
3da6ec3 HEAD@{25}: commit: fix computation of when to skip processing for special orders

По существу, за коммитом следовала проверка другой ветви. (В моем случае ветвь online-payment-processing находилась в подвешенном состоянии, и сообщение «переход от» заверило меня, что предыдущий коммит был в моей ветке.) Я знал, что коммит в HEAD был ошибочным в отличие от еще одного в истории), поэтому я дал команду:

git rebase 3da6ec3 online-payment-processing

и ... poof ... это исправлено (после некоторого разрешения конфликта) и история моего филиала была восстановлена.

0 голосов
/ 18 декабря 2010

Чтобы увидеть историю того, как изменилась только ветка разработки, используйте:

git reflog show develop

Затем либо извлекайте, либо добавляйте ветви / теги к более старым коммитам по их SHA (или по позиции, например, разверните @ {1}), пока не найдете последний работающий. Например:

git branch test 7f6c394

Глядя на журнал, кажется, что эти другие коммиты также являются частью разработки: ed44a2c, 67d08b3, 505479c

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

...