Есть ли разница между git reset --hard HEAD и git checkout.?
Если я вношу изменения в рабочее дерево и еще не совершил, и я хотел бы вернуть изменения, которые я сделал, есть ли разница между
git reset --hard HEAD
и
git checkout .
?
Ответ 1
git checkout -- ., очевидно, будет работать только с текущим каталогом (и его подкаталогами), git reset --hard будет работать на полном рабочем дереве.
git checkout -- . будет обновлять только рабочее дерево и оставлять уже поставленные файлы как есть, тогда как git reset --hard будет соответствовать индексу и рабочему дереву с фиксацией HEAD.
при использовании с refspec:
reset установит текущую ветвь ветки на заданную фиксацию (и соответствует индексу и рабочему дереву).
checkout переключится на эту ветку, оставив локальные изменения неповрежденными, когда они касаются файлов, которые не менялись между текущей ветвью и ветвью, которую нужно проверить
Ответ 2
Эти ответы хороши. Я хотел бы добавить, что если вы удалили файлы, которые были поставлены, но еще не были совершены, то git checkout. в одиночку не приведет удаленные файлы обратно в рабочую область. A git reset --hard будет.
Ответ 3
Это является хорошим (и исчерпывающим) объяснением автора книги Pro Git.