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

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

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

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

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

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

6 ответов


git reset --hard origin/master

удалить все коммиты не в origin/master здесь origin - это имя РЕПО и master - это название ветки.


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

git branch -D master
git checkout master

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

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

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

git checkout -b 'temp'
git branch -D master
git checkout master
git branch -D temp

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

git reset --hard HEAD^

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

git fetch

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


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

git pull origin
git reset --hard 

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

git checkout -b master

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

git -D master