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