Git отменить все изменения и вытащить из апстрима

145

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

NinjaCowgirl
источник

Ответы:

251

Здесь (по крайней мере) есть две вещи, которые вы можете сделать здесь: вы можете отложить удаленное репо, или вы можете reset --hardсделать это для общего предка, а затем выполнить извлечение, которое перемотает к последнему коммиту на удаленном мастере.

Чтобы быть конкретным, вот простое продолжение оригинального ответа Невика Рехнела:

git reset --hard origin/master
git pull origin master

ПРИМЕЧАНИЕ : использование git reset --hardотменит любые незафиксированные изменения, и может быть легко спутать себя с этой командой, если вы новичок в git, поэтому убедитесь, что у вас есть представление о том, что она собирается делать, прежде чем продолжить.

Эрик Уокер
источник
1
Больше помощи для новичков там: git gcубирает и бежит через некоторую уборку. С другой стороны, я никогда не бегал git gc. Бегать приятно, но не нужно.
Джошуа Дэнс
@ JoshuaDance - хорошая мысль. Я не уверен, почему я изначально включил его.
Эрик Уокер,
23

пока на ветке мастер: git reset --hard origin/master

затем покончим с этим git gc(подробнее об этом на страницах руководства)

Обновление: вам также, вероятно, понадобится сделать git fetch origin(или, git fetch origin masterесли вы хотите только эту ветку); это не должно иметь значения, если вы делаете это до или после сброса. (Спасибо, Эрик-Уокер)

Невик Рехнел
источник
1
Возможно, вам придется сделать тягу после reset --hard.
Эрик Уокер,
Извлечение из мастера не требуется, если перед сбросом запущен источник git fetch.
sciritai
@sciritai: мой комментарий был добавлен до упоминания о получении из источника.
Эрик Уокер,
19

Вы можете сделать это одной командой:

git fetch --all && git reset --hard origin/master

Или в паре команд:

git fetch --all
git reset --hard origin/master

Обратите внимание, что вы потеряете ВСЕ ваши локальные изменения

Лука С.
источник
5
git reset <hash>  # you need to know the last good hash, so you can remove all your local commits

git fetch upstream
git checkout master
git merge upstream/master
git push origin master -f

вуаля, теперь твой форк вернулся к тому же как вверх по течению.

resultsway
источник
0

Теперь я наконец понял, что вместо git fetch --all && git reset --hard origin/masterэтого должно быть git fetch --all && git reset --hard origin/<branch_name>вместо этого (если кто-то работает в другой ветке)

BitFreak
источник