В моих экспериментах мне не удалось найти функциональную разницу между
git reset --hard
и
git reset --merge
В инструкциях по использованию не указывается ни
--hard reset HEAD, index and working tree
--merge reset HEAD, index and working tree
Я регулярно использую параметр --hard
, чтобы понять, как это работает. Какая разница между параметрами --merge
и --hard
?
Cheers, Olly
Возможно, пример поможет здесь, используйте следующую последовательность:
cd git_repo
touch file_one
git add file_one
git commit -m "commit one" # sha1 of 123abc
echo "one" >> ./file_one
git commit -a -m "commit two" # sha1 of 234bcd
echo "two" >> ./file_one
git add . # populate index with a change
echo "three" >> ./file_one # populate working area with a change
Теперь, если я попробую
git reset --merge 123abc
Я получаю
error: Entry 'file_one' not uptodate. Cannot merge.
fatal: Could not reset index file to revision '123abc'
причина, заключающаяся в том, что file_one имеет изменения как в рабочей области, так и в индексе
Чтобы исправить это, я делаю
git add .
git reset --merge 123abc
На этот раз он работает, однако, я получаю тот же результат, что и git reset --hard
. Индекс пуст, рабочая область пуста, file_one пуст, как и после первой фиксации.
Может кто-нибудь придумать шаги, которые иллюстрируют разницу?