Как сделать «git reset» эффективным без использования опции «—hard»

#git #git-reset

#git #git-сброс

Вопрос:

Я использую git reset для перехода назад в моем дереве git; однако, за исключением времени, когда я использую --hard option, мои файлы не возвращаются к своим более ранним версиям. В качестве примера я создал файл с именем f1.txt и в каждом коммите я добавлял к нему символ, но когда я использую git reset --mixed git reset --soft команды или, они не меняют содержимое f1.txt и все символы на месте (хотя, когда я использую git log , я вижу, что ГОЛОВА откинулась назад).

Комментарии:

1. Вот как git reset это работает. Подробнее о git reset . Как следует из ответов, вы, вероятно, захотите использовать git switch или git checkout (если вы используете версию Git старше 2.23).

Ответ №1:

Вы не можете использовать git reset для навигации по вашему дереву.
git reset сбросит «этап» (то, что зафиксировано при вас git commit ). Так что, если вы это сделаете git add и захотите отменить это, вы используете git reset .
Если вы это сделаете git reset --hard HEAD , это также приведет к сбросу файла в состояние HEAD .

Для навигации по дереву вам необходимо использовать git checkout <branch/commit> . Если вы не хотите извлекать коммит, а просто получить один файл из предыдущего коммита, вы можете это сделать git checkout <branch/commit> -- path/to/file .

Проверьте документы:

Комментарии:

1. Ну, технически, вы можете использовать git reset этот способ, но это немного похоже на использование pogo-stick с ядерным двигателем для передвижения, вместо того, чтобы ходить, водить машину или что-то еще. Грубо на теле. 🙂

2. да, я понимаю, что git reset не является подходящей командой для навигации, но мой вопрос в основном касается параметров, которые используются с git reset. Когда мы используем —hard, мы видим изменения в наших файлах; однако при использовании —mixed или —soft наши файлы будут такими же, как при последней фиксации.

3. Да, это то, что --hard делает. Это изменяет фактические файлы. В противном случае это меняет только то, что является «поэтапным».

4. @amiref это отвечает на ваш вопрос? Если это так, принятие будет высоко оценено 😉

Ответ №2:

Я думаю, вам лучше использовать git checkout than git reset для навигации. Вы можете использовать git checkout с фиксацией SHA1.