Как отменить локальные коммиты в Git? - PullRequest
229 голосов
/ 07 октября 2010

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

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

В этот момент я получил сообщение

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

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

Ответы [ 6 ]

506 голосов
/ 07 октября 2010
git reset --hard origin/master

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

28 голосов
/ 07 октября 2010

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

git branch -D master
git checkout master

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

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

Если у вас нет других веток, кроме master, вам следует:

git checkout -b 'temp'
git branch -D master
git checkout master
git branch -D temp
11 голосов
/ 12 декабря 2017

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

git reset --hard HEAD^
3 голосов
/ 07 августа 2013

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

git fetch

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

0 голосов
/ 05 марта 2014

Я должен был сделать:

git checkout -b master

как git сказал, что его не существует, потому что он был стерт с

git -D master
0 голосов
/ 03 апреля 2013

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

git pull origin
git reset --hard 
...