Как отменить локальные коммиты в Git?

Я работал над чем-то, и решил, что он был полностью ввернут... после того, как он совершил некоторые из них. Поэтому я попробовал следующую последовательность:

git reset --hard
git rebase origin
git fetch
git pull
git checkout

В какой момент я получил сообщение

Your branch is ahead of 'origin/master' by 2 commits.

Я хочу отменить мои локальные коммиты, не удаляя свой локальный каталог и не перезагружая все. Как я могу это сделать?

Ответ 1

git reset --hard origin/master

удалит все коммиты не в origin/master, где origin - это имя репо, а master - имя ветки.

Ответ 2

Как и в стороне, помимо ответа mipadi (который должен работать, кстати), вы должны знать, что:

git branch -D master
git checkout master

также делает именно то, что вы хотите, без having to redownload everything (ваша цитата перефразирована). Это связано с тем, что в вашем локальном репо содержится копия удаленного репо (и эта копия не совпадает с вашим локальным каталогом, это не то же самое, что и выбранная ветка).

Удаление ветки совершенно безопасно и восстановление этой ветки очень быстро и не связано с сетевым трафиком. Помните, что git - это, прежде всего, локальное репо по дизайну. У других удаленных веток есть копия на локальном. Там только немного метаданных, которые сообщают git, что конкретная локальная копия на самом деле является удаленной ветвью. В git все файлы находятся на вашем жестком диске все время.

Ответ 3

Вам нужно запустить

git fetch

Чтобы получить все изменения, а затем вы не получите сообщение с "ваша ветка впереди".

Ответ 4

Я видел случаи, когда удаленный пользователь не синхронизировался и нуждался в обновлении. Если a reset --hard или branch -D не работают, попробуйте

git pull origin
git reset --hard 

Ответ 5

Мне пришлось сделать:

git checkout -b master

как git сказал, что он не существует, потому что он был очищен с помощью

git -D master

Ответ 6

Что я делаю, я стараюсь, чтобы reset был тяжелым для HEAD. Это уничтожит все локальные коммиты:

git reset --hard HEAD^