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


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

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

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

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

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

6 185

6 ответов:

git reset --hard origin/master

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

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

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

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

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