Что svn возвращает эквивалент в git?

Я пытаюсь найти эквивалент svn Revert в Git. В svn, когда я щелкнул файл, нажмите revert, который отменит все локальные изменения. файл возвращается к последнему commit. Я не могу найти ту же самую команду в Git. Поскольку я новичок, я не хочу испортить свою работу.

Скажем, я сделал commit Init. Затем я внес некоторые изменения. Теперь я хотел бы вернуться в состояние Init.

Спасибо за помощь

Ответ 1

Из-за области подготовки, это не так просто, как svn revert. В зависимости от того, что вы сделали, и какова ваша цель, вам нужно использовать либо git checkout либо git reset. Вы должны быть осторожны с git reset, так как вы можете переписать историю и потерять работу.

Допустим, у вас есть граф коммитов:

A <-- B <-- C <-- D

И вы в настоящее время в D с некоторыми изменениями. Чтобы просто отменить все изменения (ступенчатые или нет), вы можете использовать git reset --hard HEAD или git reset --hard D Оба сбросят состояние вашей рабочей копии.

Если вы хотите, чтобы состояние вашей рабочей копии было идентичным A, но не потеряло коммиты B и C, вам следует использовать: git checkout A --. с верхней части вашей рабочей копии. Это установит состояние вашей рабочей копии на содержимое A На этом этапе ваше рабочее дерево загрязнено, поэтому вам необходимо зафиксировать факт того, что вы хотели вернуться назад. График коммитов на этом этапе будет:

A <-- B <-- C <-- D <-- A'

Где A' - это новый коммит (с другим идентификатором), который возвращает вашу работу к эквиваленту коммита A

Если вы хотите потерять коммит B и C, вы можете использовать git reset --hard A Это переместит указатель вашей ветки обратно для фиксации A Вы сейчас переписываете историю, так что будьте осторожны. Если вы работаете с другими членами команды в этой ветке, вы не хотите этого делать. Если это ваша собственная ветвь, вам, вероятно, потребуется использовать git push -f, где -f означает --force, при --force его на удаленное репо. Вы также должны убедиться, что вы установили push.default в current или upstream current чтобы избежать нажатия всех соответствующих ветвей и случайного перемотки работы.

FWIW, я написал сообщение в блоге о возврате изменений в Git несколько лет назад. Это актуально и сегодня. Вы можете найти это полезным.

Ответ 2

Пока файлы не выполняются, я обычно использую

git checkout -- .

Вы также можете использовать

git checkout HEAD -- path/to/some/file.txt

чтобы проверить один файл из HEAD или любой другой фиксации

Ответ 3

git reset --hard Init

Вернет ваш HEAD в Init. Вы можете сначала создать ветку или тег, чтобы сохранить любую другую работу, которую вы сделали.