В чем разница между "git checkout-f" и "git reset --hard HEAD"?
мне нужно отменить локальные изменения для развертывания. (Я использовал svn revert
для этого в старые школьные дни SVN.)
и я использую git reset --hard HEAD
для этого. (Также git fetch
и git merge origin/$branch --no-ff
для синхронизации с восходящей веткой.)
но некоторые статьи, пункты git checkout -f
для отмены изменений.
каковы основные различия между этими командами. Какой путь рекомендуется?
2 ответа:
оба они имеют точно такой же эффект. Я рекомендую вам выбрать решение, с которым вы более комфортно.
но если в данном конкретном случае эффект один и тот же, то при разных значениях он будет совершенно другим. В основном (есть еще, см. связанные темы) при сбросе вы перемещаете текущую ветвь и головку в определенную фиксацию, но с проверкой вы перемещаете только головку . Для получения более подробной информации см. под.
ресурсы:
по теме:
у меня еще нет репутации, чтобы комментировать другие ответы, я просто хотел добавить, что я столкнулся с тем, что две команды не имеют одинакового эффекта. Я попал в странное состояние, так что это, безусловно, крайний случай. Вот что произошло:
Я был в ветке, все чисто. Я проверил мастер
git checkout master
и нашли отgit status
что были внесены изменения в существующие файлы, не поставленные для фиксации (да, в коде, который я только что проверил). Я попытался спрятаться, чтобы вернуться к чистому государство, тайник утверждал, что завершил, ноgit status
все еще был неизменен. Тоже пробовалgit reset --hard HEAD
. Он также сообщил об успешном завершении, но статус не отличался. Я не мог прервать эти странные изменения.однако,
git checkout -f
решил эту. Мне удалось вырваться из этого странного состояния. Так что, по крайней мере, в некотором смысле, это не одно и то же.