Ответ 1
Во-первых, всегда стоит отметить, что git reset --hard
является потенциально опасной командой, поскольку она отбрасывает все ваши незафиксированные изменения. В целях безопасности вы должны всегда проверять, что вывод состояния git status
чистый (то есть пустой) перед его использованием.
Сначала вы говорите следующее:
Итак, я знаю, что Git отслеживает изменения, которые я делаю в своем приложении, и он остается в силе до тех пор, пока я не внесу изменения, но здесь, где я зависаю:
Это неверно. Git записывает только состояние файлов, когда вы их ставите (с помощью git add
) или когда вы создаете коммит. После того как вы создали коммит, в котором файлы вашего проекта находятся в определенном состоянии, они очень безопасны, но до тех пор Git не отслеживал изменения в ваших файлах. (например, даже если вы сделаете git add
для создания новой версии файла, это перезапишет ранее подготовленную версию этого файла в области подготовки.)
В своем вопросе вы затем спрашиваете следующее:
Когда я хочу вернуться к предыдущему коммиту, я использую: git reset --hard HEAD И git возвращает: HEAD теперь на 820f417 микро
Как мне затем вернуть файлы на моем жестком диске обратно к предыдущему коммиту?
Если вы выполните git reset --hard <SOME-COMMIT>
то Git будет:
- Сделайте вашу текущую ветвь (обычно
master
) обратно к точке<SOME-COMMIT>
. - Затем сделайте файлы в вашем рабочем дереве и индексе ("промежуточная область") такими же, как версии, зафиксированные в
<SOME-COMMIT>
.
HEAD
указывает на вашу текущую ветвь (или текущий коммит), поэтому все, что git reset --hard HEAD
, - это отбросит все ваши незафиксированные изменения.
Итак, предположим, что хорошим коммитом, к которому вы хотите вернуться, является f414f31
. (Вы можете найти это через git log
или любой браузер истории.) Затем у вас есть несколько разных опций в зависимости от того, что именно вы хотите сделать:
- Вместо этого измените текущую ветку, чтобы она указывала на более старый коммит. Вы можете сделать это с помощью
git reset --hard f414f31
. Однако это переписывает историю вашей ветки, поэтому вам следует избегать ее, если вы поделились этой веткой с кем-либо. Кроме того, коммиты, которые вы сделали послеf414f31
, больше не будут в истории вашейmaster
ветки. -
Создайте новый коммит, который представляет собой то же состояние проекта, что и
f414f31
, но просто добавляет его в историю, чтобы вы не потеряли историю. Вы можете сделать это, используя шаги, предложенные в этом ответе - что-то вроде:git reset --hard f414f31 git reset --soft [email protected]{1} git commit -m "Reverting to the state of the project at f414f31"