2015-02-01 2 views
0

Я совершил и нажал какой-то код, который не работал, что, по моему мнению, было бы хорошей возможностью узнать, как откат к предыдущему commit/pull.git (исходное дерево) как восстановить неустановленные файлы

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

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

Кажется, я потерял все свои неустановленные файлы, над которыми работал весь день. Как я могу вернуть их и потерять бесполезную фиксацию, которую я нажал раньше?

Спасибо за ваше время и ввод.

+0

Самый важный вопрос: вы натолкнули свое обязательство? Если да, есть ли другие пользователи? Если да, то оба они предполагают, что они установлены в камне. – lassombra

+0

@lassombra Да, первоначальная фиксация была нажата с одним изменением файла. Мое беспокойство заключается в том, что в неустановленных файлах, которые исчезли после вышеупомянутых изменений, было несколько изменений файла, они полностью исчезли после использования кнопки удаления. Я думал, что кнопка удаления только удалит фиксацию, которую я изначально нажал. – RubyMax

+0

Есть ли другие пользователи (другой важный вопрос)? Удалить удаляет файлы из вашей файловой системы, а не git. Когда они находятся в фиксации, они находятся там, если вы не переписываете историю, которую никакая система не собирается делать легко. – lassombra

ответ

1

Прежде всего, я бы рекомендовал читать на git-терминах и что на самом деле означают разные операции: http://git-scm.com/book/en/v2.

Хороший поверхностный чит-лист можно найти по адресу http://www.ndpsoftware.com/git-cheatsheet.html Теперь, чтобы узнать, с чем вы имеете дело.

Удалить не удаляет вещи из git, фактически делает именно то, что команда rm делает в командной строке в unix. Он удаляет их из вашей файловой системы. Если вы rm-файлы, которые вы не поставили, они просто исчезли.

К сожалению, я не могу помочь вам вернуть файлы, которые вы удалили. Изучите инструменты восстановления ОС, если сможете, но не задерживайте дыхание, если у вас нет кеша удаления какого-либо типа (корзина для корзины в окнах).

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

Сброс изменяет одно из состояний вашего процесса git, чтобы вы могли изменить то, что делаете. Мягкий сброс изменяет только указатель HEAD, на который вы указываете. Команда git reset --soft изменит ваш указатель HEAD на то, что вы ему предоставили (по умолчанию HEAD ничего не делает). Команда git reset изменит вашу HEAD и вашу промежуточную область в соответствии с данным фиксацией (по умолчанию HEAD, чтобы она просто все разрядила). Команда git reset --hard сбрасывает HEAD, область постановки (aka index) и рабочий каталог, чтобы соответствовать заданной фиксации (опять же, по умолчанию HEAD, поэтому вы возвращаетесь в полностью чистую среду, как если бы вы ничего не делали после последнего фиксации).

Если вы хотите полностью удалить фиксацию, это называется сбросом головки. Технически сам фиксатор никогда не уходит, но вы можете сделать так, чтобы он был недоступен с помощью обычных средств и эффективно выводил его из истории проекта. Предостережение: это должно быть сделано НИКОГДА не должно быть сделано на толкаемых коммитах с нисходящими пользователями. Часто возникает большой вопрос: насколько вы ненавидите свой нисходящий поток, поскольку единственным безопасным вариантом для них является повторное клонирование, сдувающее всю свою работу после того, как вы это сделаете.

Процесс будет состоять из git reset --hard HEAD, в результате чего вся ваша среда будет находиться в состоянии последней фиксации.Затем вы хотите получить reset --soft HEAD^, который изменяет HEAD (то, что вы отключаете) до предыдущего. Это приведет вас к состоянию перед тем, как вы нажмете фиксацию, при этом все ваши поэтапные изменения все равно будут поставлены. На этом этапе вы можете отменить свои изменения с помощью git reset --hard HEAD, вы можете полностью отключить все с помощью git reset HEAD И, наконец, вы можете построить еще одну фиксацию и двигаться вперед.

Для более глубокого взгляда на изменение истории и на то, почему это в принципе не разрешено после ее нажатия, вы можете посмотреть здесь: http://justinhileman.info/article/changing-history/ есть даже очень хорошая блок-схема с ссылками на команды в конце статьи.

+0

Благодарим вас за то, что нашли время, чтобы дать мне очень полезные руководства и указатели, о которых я могу узнать. – RubyMax

+0

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

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