Во-первых, всегда стоит помнить, что git reset --hard
— потенциально опасная команда, поскольку она отбрасывает все ваши незафиксированные изменения. В целях безопасности вы всегда должны проверять, что вывод git status
чист (то есть пуст) перед его использованием.
Сначала вы говорите следующее:
Итак, я знаю, что Git отслеживает изменения, которые я вношу в свое приложение, и удерживает их до тех пор, пока я не зафиксирую изменения, но здесь я застрял:
Это неправильно. Git записывает состояние файлов только при их подготовке (с помощью git add
) или при создании коммита. После того, как вы создали фиксацию, в которой файлы вашего проекта находятся в определенном состоянии, они очень безопасны, но до тех пор Git на самом деле не «отслеживает изменения» в ваших файлах. (например, даже если вы сделаете git add
для подготовки новой версии файла, это перезапишет предыдущую версию этого файла в области подготовки.)
В своем вопросе вы продолжаете спрашивать следующее:
Когда я хочу вернуться к предыдущей фиксации, я использую: git reset --hard HEAD И git возвращает: HEAD теперь на 820f417 micro
Как мне вернуть файлы на моем жестком диске к предыдущей фиксации?
Если вы сделаете 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 HEAD@{1}
git commit -m "Reverting to the state of the project at f414f31"
person
Mark Longair
schedule
02.03.2012
git reset --hard
вам следуетgit checkout <branch>
. - person jweyrich   schedule 02.03.2012