Если вы просто хотите выбросить его, пока вы находитесь в своей основной ветке:
git reset --hard HEAD^
Эта команда сбросит указатель HEAD вашего мастера на предыдущий коммит. (Вы также можете сказать «HEAD ~ 1», что означает то же самое, что и HEAD ^.) В более общем смысле вы также можете сбросить свой мастер, чтобы он был таким же, как у сервера:
git reset --hard origin/master
Это будет работать независимо от состояния мастера (т. Е. 5 коммитов перед источником или 30 коммитов за ним). Параметр --hard
в этих командах означает, что файлы в вашем рабочем дереве также будут сброшены вместе с заголовками ветвей.
Дополнительные советы
Если вы оказались в подобной ситуации, когда вы действительно хотели сохранить свои изменения, вы всегда можете сделать:
git fetch # This grabs changes from the server without merging them
git rebase origin
Это воспроизведет любую работу, которую вы выполняете в мастере, поверх последних изменений на сервере.
Еще одна альтернатива - создать ветку темы для вашей работы над мастером:
git checkout -b newfeature
Затем вы можете переключиться обратно на мастер (git checkout master) и использовать первую команду, которую я дал, чтобы перемотать мастер обратно на один коммит. Помните, что ветки - это просто удобные имена для коммитов в вашем хранилище. Например, master
- это просто ссылка на последний коммит в этой ветке. Вы можете перемещать эти ссылки по своему усмотрению, и, как только вы станете более продвинутыми в git, вы обнаружите, что делаете это довольно часто.
Я также рекомендую вам иметь привычку запускать gitk --all
всякий раз, когда вы играете с ветками, чтобы вы могли визуально точно видеть, что вы делаете. Когда я был новичком в git, я постоянно запускал эту команду . Я все еще делаю ...