Возиться с историей GIT уничтожил последние коммиты ... как восстановить? - PullRequest
4 голосов
/ 28 сентября 2010

Итак. Я новичок в Git. И я думаю, что, возможно, сломал что-то сверх моей способности восстановить (ура).

Вот разбивка:

Я создал удаленный каталог и случайно включил ОЧЕНЬ большие файлы в первоначальный коммит. Это мешало людям что-либо делать с этим. (Сначала я не осознавал, внес изменения и некоторое время использовал каталог самостоятельно)

Я узнал, что простое удаление файлов и фиксация удаления не помогают людям, клонирующим каталог, и узнал об изменении истории с помощью таких команд, как:

git filter-branch --tree-filter 'rm -f public/vidos/*' HEAD

, который, насколько мне известно, удалит все файлы из публичного каталога / vidos / и избавит от них всю память.

Это, похоже, произошло. Я мог успешно клонировать вещи (без ошибок памяти), и в клонированной копии не было очень больших файлов.

Затем, сегодня утром (после того, как тупо убедившись, что я точно подобрал удаленный депозитарий (т.е. избавился от всех моих локальных вещей, думая, что это должно быть актуально для всего, кроме этих больших файлов), я начал работать с каталог и понял, что все файлы кажутся такими же, какими они были при первоначальной регистрации (никаких изменений, и есть МНОГИЕ вещи, которые я модифицировал, отображаются)

Я сделал

git log

для просмотра всех модификаций и просмотра всех моих коммитов (в том числе коммитов, которые удаляли супер большие файлы из каталога). Тогда я сделал

git reset hashcode

для отката на соответствующий git (с хэш-кодом, который я получил из журнала).

За исключением ... даже если он думает, что я на правильном коммите, ФАЙЛЫ все еще идентичны тем, которые я впервые сдал.

Я могу оглянуться назад на свою историю и УВИДЕТЬ, что я не фильтровал ветвления ни в одном из файлов, которые в настоящее время не изменены ... и я ДЕЙСТВИТЕЛЬНО не понимаю, почему моих изменений больше нет. Я зафиксировал ... Я нажал ... Я был почти уверен, что в удаленном репозитории были все мои изменения (мог их проверить (занял бы вечность и не хватило бы памяти, но я бы получил файлы) и ВИДЕТЬ изменения ... .... но я их больше не вижу.

Я сделал что-то глупое? Делает ли возня с историей вещи, о которых я не знал? Совершенно невозможно, что вещи, которые я описал, испортили мой репозиторий? (то есть я должен смотреть в совершенно ином направлении?)

Я действительно, ОЧЕНЬ хочу вернуть мои модификации ... тиражирование всего этого кода (и запоминание того, что я даже сделал) будет очень сложно. Есть ли что-нибудь, что я могу сделать?

РЕДАКТИРОВАТЬ:

~~~~~~~~~~~ Хорошо, сброс не работает, но делает:

git checkout hashcode

, кажется, работает просто отлично, и я вижу изменения в моем коде.

Но checkout означает, что я не в какой-либо ветке, и я не могу, чтобы они зафиксировали эти изменения, чтобы они были «самыми последними» (они считают, что они актуальны) Любые идеи о том, как я могу сделать это сделать «головой»? И как только это станет головой, это избавит меня от фильтрации веток, которую я сделал, чтобы избавиться от супер больших файлов? И если это произойдет, кто-нибудь есть какие-либо советы о том, как избавиться от этих супер больших файлов без этой головной боли снова.

Если нет другого пути, могу ли я просто извлечь две копии (одну в голове, одну в моем последнем хорошем коммите) и вручную скопировать и вставить хорошие файлы в голову, а затем зафиксировать? Похоже, это будет работать, но не будет очень чистым.

1 Ответ

1 голос
/ 28 сентября 2010

В основном,

 git checkout hashcode

делает то, что я думал, git reset будет. Я не уверен, ПОЧЕМУ изменения были отменены, когда я отфильтровал ветвь, но теперь, когда я, по крайней мере, снова вижу код, я просто вручную скопировал изменения в клон головы, а затем снова перепроверил изменения. Не самое элегантное решение, но я должен сохранить свою фильтрацию И иметь последний код.

Я думаю, что часть того, что, вероятно, произошло, было моим неполным пониманием git-репозиториев. Я никогда не справлялся с этим раньше, но у меня было полумрачное представление о том, что репозиторий git всегда "актуален" и что он имеет самую последнюю версию. Когда я выполнял фильтрацию веток, я находился в репозитории git и заметил, что фильтры находятся в состоянии git и требуют фиксации. Так я и сделал. Вероятно, хранилище на самом деле не было «современным», и поэтому при фиксации (и безрассудном переопределении) я, вероятно, перезаписал изменения и по существу откатил все назад.

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