Каковы деструктивные команды в git? - PullRequest
11 голосов
/ 28 апреля 2010

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

На какие команды я должен обратить особое внимание и избежать их неправильного использования, потому что пути назад нет?

Ответы [ 4 ]

11 голосов
/ 28 апреля 2010

Здесь есть два вида «деструктивных» команд - команды, которые разрушительны для вашей истории мерзавцев, и команды, которые отменяют изменения в вашей рабочей копии.

Команды, которые отбрасывают изменения рабочего дерева :

  1. git reset
  2. git checkout

Как уже упоминалось, сочетание reflog и того факта, что объекты git не удаляются сразу (если вы не включите автоматическую очистку), означает, что вы обычно можете отменить такие операции, как git reset/rebase/merge.

Эти команды, на самом деле, отбрасывают объекты git , исключая возможность отмены:

  1. git gc (по умолчанию это удаляет недоступные объекты, возраст которых не менее 2 недель)
7 голосов
/ 28 апреля 2010

Согласно http://blog.reverberate.org/2009/07/30/gits-needs-a-new-interface/

 $ git checkout foo.c

... перезапишет любые локальные модификации, которые могут вам понадобиться для foo.c без запроса.

3 голосов
/ 28 апреля 2010

Вы можете потерять незафиксированные изменения с помощью команды git reset. Если ваши изменения зафиксированы, вы защищаетесь журналом на несколько дней, прежде чем он будет очищен gc.

Например, если вы checkout, rebase, reset или merge, которые все вносят изменения, вы можете вернуться к предыдущему коммиту, выполнив команду reflog и используя reset для сбросьте ваш заголовок на старый коммит.

3 голосов
/ 28 апреля 2010

git reset --hard не может быть отменено

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