В недавнем ответе , в котором он подробно описывает типичные варианты использования 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- ответ.
Однако я не отвлекаюсь на небольшой эксперимент с этими флагами, похожий по духу на глупый пример списка покупок, который я разместил в этом ответе.