В недавнем ответе , в котором он подробно описывает типичные варианты использования git-reset
трех наиболее часто используемых опций (--hard
, --mixed
и --soft
), torek упоминает попутно, что git-reset
также предлагает два относительно эзотерических флага, называемых --merge
и --keep
. git-reset
man page описывает эти два флага следующим образом:
--merge Resets the index and updates the files in the working tree that are different between <commit> and HEAD, but keeps those which are different between the index and working tree (i.e. which have changes which have not been added). If a file that is different between <commit> and the index has unstaged changes, reset is aborted. In other words, --merge does something like a git read-tree -u -m <commit>, but carries forward unmerged index entries. --keep Resets index entries and updates files in the working tree that are different between <commit> and HEAD. If a file that is different between <commit> and HEAD has local changes, reset is aborted.
Я прекрасно понимаю, когда использовать --hard
, --mixed
или --soft
, но я узнал только, что --merge
и --keep
существовал при чтении ответа torek, и я не могу придумать практические примеры использования из этих двух флагов... В каких ситуациях вы обычно используете эти два флага?
В основном я ищу объяснение на простом английском языке. Возьмите следующий отрывок из этого ответа VonC, в котором описывается типичный пример использования git reset --soft
в качестве модели:
[...] каждый раз:
- вы удовлетворены тем, что у вас получилось (в терминах рабочего дерева и индекса)
- вы не удовлетворены всеми коммитами, которые заставили вас туда добраться:
git reset --soft
- ответ.
Однако я не отвлекаюсь на небольшой эксперимент с этими флагами, похожий по духу на глупый пример списка покупок, который я разместил в этом ответе.