Во-первых, всегда стоит отметить, что git reset --hard
является потенциально опасной командой, поскольку она отбрасывает все ваши незафиксированные изменения. В целях безопасности вы всегда должны убедиться, что выход git status
является чистым (то есть пустым) перед его использованием.
Первоначально вы сказать следующее:
Так что я знаю, что Git отслеживает изменения, внесенные в моем приложении, и он держит на них, пока я не зафиксировать изменения, но вот где я повесил трубку:
В случае, если это выявит ошибочное предположение, я должен сказать, что это неверно. Git записывает только состояние файлов при их создании (с git add
) или при создании фиксации. Когда вы создали коммит, который имеет файлы вашего проекта в определенном состоянии, они очень безопасны, но до тех пор Git не выполняет «отслеживание изменений» в ваших файлах. (например, даже если вы делаете git add
для создания новой версии файла, которая перезаписывает ранее поставленную версию этого файла в промежуточной области.)
В своем вопросе вы потом спросить следующее:
Когда я хочу, чтобы вернуться к предыдущей фиксации я использую: мерзавец сбросить --hard голова и GIT возвращается: НАЧАЛЬНИК теперь в 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
, но просто добавляет это к истории, поэтому вы не теряете истории. Вы можете сделать это, используя шаги, предложенные в this answer - что-то вроде:
git reset --hard f414f31
git reset --soft [email protected]{1}
git commit -m "Reverting to the state of the project at f414f31"
Что вы имеете в виду, возвращаясь к файлам на жестком диске обратно к тому, что предыдущий коммит? Если 820f417 является вашим желаемым фиксацией, в файлах теперь должен быть точный контент. – kennytm
Если вы хотите отменить все изменения, после 'git reset --hard', вы должны« git checkout '. –
jweyrich
У меня действительно нет идеи [дублировать], а затем задайте новый вопрос, когда ответы не будут удовлетворительными. Это рецепт катастрофы с точки зрения большего количества дубликатов .... –