В чем разница между git reset --mixed, --soft и --hard? - PullRequest
636 голосов
/ 20 августа 2010

Я хочу разделить коммит и не уверен, какой вариант сброса использовать.

Я смотрел на страницу Можете ли вы объяснить, что делает "git reset" на простом английском? , но я понял, что не совсем понимаю, что такое индекс git или область подготовки и, следовательно, объяснения не помогло.

Кроме того, варианты использования для --mixed и --soft выглядят одинаково для меня в этом ответе (когда вы хотите исправить и подтвердить.) Может кто-нибудь разбить его еще больше? Я понимаю, что --mixed, вероятно, вариант, но я хочу знать, , почему . Наконец, как насчет --hard?

Может ли кто-нибудь дать мне пример рабочего процесса того, как будет происходить выбор трех вариантов?

Ответы [ 13 ]

1 голос
/ 21 мая 2018

Основное различие между различными опциями команды git reset приведено ниже.

  • - soft: сбрасывает только HEAD к выбранному вами коммиту. Работает в основном так же, как git checkout, но не создает отдельное состояние головы.
  • - смешанный (опция по умолчанию): сбрасывает заголовок в коммит, выбранный вами в истории, и отменяет изменения в индексе.
  • - hard: Сбрасывает HEAD на коммит, выбранный вами в истории, отменяет изменения в индексе и отменяет изменения в вашем рабочем каталоге.
1 голос
/ 14 июля 2017

Краткий ответ, в каком контексте используются 3 опции:

К сохранить текущие изменения в коде , но переписать историю фиксации:

  • soft: вы можете зафиксировать все сразу и создать новый коммит с новым описанием (если вы используете torotise git или любой другой графический интерфейс, это тот, который нужно использовать, так как вы можете пометить, какие файлы вы хотите вкоммитить и сделать несколько коммитов таким образом с разными файлами. В Sourcetree все файлы будут размещены для фиксации.)
  • mixed: вам нужно будет снова добавить отдельные файлы в индекс, прежде чем делать коммиты (вSourcetree: все измененные файлы были бы неизменными)

На самом деле потеряет ваши изменения в коде:

  • hard: вы нене просто переписать историю, но и потерять все ваши изменения вплоть до точки сброса
0 голосов
/ 22 июня 2018

Ответ mkarasek велик, простыми словами, мы можем сказать ...

  • git reset --soft: установите HEAD для предполагаемого коммита, но сохраняйте свои изменения с последними коммитами
  • git reset --mixed: это то же самое, что и git reset --soft, но единственное отличие состоит в том, что он не ставит ваши изменения после последних коммитов
  • git reset --hard: установите HEAD в указанном вами коммите и сбросьте все вашиизменения от последних коммитов, включая не зафиксированные изменения.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...