Git: Возврат к предыдущему состоянию коммита - PullRequest
24 голосов
/ 15 февраля 2011

Я в замешательстве. Я хочу вернуться к предыдущему коммиту, который я указал в "git log".

Но когда я делаю "git checkout", я не получаю этот коммит. Ничего не меняется Он говорит мне, что я нахожусь в режиме HEAD, но нужные мне файлы отсутствуют.

Что я делаю не так?

МРБ

Ответы [ 2 ]

20 голосов
/ 15 февраля 2011

git reset --hard <commit> С справочной страницы:

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

git checkout для переключения вашего рабочего каталога на другую ветку или коммит. Это не перемещает HEAD туда.

8 голосов
/ 23 октября 2012

НЕ УДЕРЖИВАЙТЕ сброс - твердо, он постоянен!

Пожалуйста, используйте

git stash -u 

вместо этого! Если у вас есть кусок работы, который вы случайно порезали, вы все равно можете получить его обратно. Это никогда не будет перенесено на ваш пульт, если вы не решите сделать это, сделав из него ветку и подняв ее вверх.

Кроме того, вы находитесь на правильном пути, который вы можете использовать git checkout, чтобы выполнить то же самое. Синтаксис

git checkout HEAD -- . 

Но у него та же проблема, что и у git reset --hard. Придерживайтесь тайника, и в будущем вы потеряете свои волосы.

Более длинный ответ

Вышеуказанные решения отменяют все ваши изменения. Однако вы спросили, как избавиться от некоторых изменений. Я добавлю это для полноты.

Для этого вы можете

git add file1 file2 file3
git stash save --patch

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

...