Прежде всего, я бы рекомендовал читать на 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/ есть даже очень хорошая блок-схема с ссылками на команды в конце статьи.
Самый важный вопрос: вы натолкнули свое обязательство? Если да, есть ли другие пользователи? Если да, то оба они предполагают, что они установлены в камне. – lassombra
@lassombra Да, первоначальная фиксация была нажата с одним изменением файла. Мое беспокойство заключается в том, что в неустановленных файлах, которые исчезли после вышеупомянутых изменений, было несколько изменений файла, они полностью исчезли после использования кнопки удаления. Я думал, что кнопка удаления только удалит фиксацию, которую я изначально нажал. – RubyMax
Есть ли другие пользователи (другой важный вопрос)? Удалить удаляет файлы из вашей файловой системы, а не git. Когда они находятся в фиксации, они находятся там, если вы не переписываете историю, которую никакая система не собирается делать легко. – lassombra