Как мне получить обратный репозиторий и заставить его заменить мастер? У меня только одна ветка в репо, которая является master, и я полностью испортил ее, поэтому мне нужно начать все сначала с апстрима. Я думаю, что init сделает работу, но есть ли более простой способ?
Здесь (по крайней мере) есть две вещи, которые вы можете сделать здесь: вы можете отложить удаленное репо, или вы можете reset --hardсделать это для общего предка, а затем выполнить извлечение, которое перемотает к последнему коммиту на удаленном мастере.
Чтобы быть конкретным, вот простое продолжение оригинального ответа Невика Рехнела:
ПРИМЕЧАНИЕ : использование git reset --hardотменит любые незафиксированные изменения, и может быть легко спутать себя с этой командой, если вы новичок в git, поэтому убедитесь, что у вас есть представление о том, что она собирается делать, прежде чем продолжить.
Больше помощи для новичков там: git gcубирает и бежит через некоторую уборку. С другой стороны, я никогда не бегал git gc. Бегать приятно, но не нужно.
Джошуа Дэнс
@ JoshuaDance - хорошая мысль. Я не уверен, почему я изначально включил его.
Эрик Уокер,
23
пока на ветке мастер:
git reset --hard origin/master
затем покончим с этим git gc(подробнее об этом на страницах руководства)
Обновление: вам также, вероятно, понадобится сделать git fetch origin(или, git fetch origin masterесли вы хотите только эту ветку); это не должно иметь значения, если вы делаете это до или после сброса. (Спасибо, Эрик-Уокер)
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
вуаля, теперь твой форк вернулся к тому же как вверх по течению.
Теперь я наконец понял, что вместо git fetch --all && git reset --hard origin/masterэтого должно быть git fetch --all && git reset --hard origin/<branch_name>вместо этого (если кто-то работает в другой ветке)
git gc
убирает и бежит через некоторую уборку. С другой стороны, я никогда не бегалgit gc
. Бегать приятно, но не нужно.пока на ветке мастер:
git reset --hard origin/master
затем покончим с этим
git gc
(подробнее об этом на страницах руководства)Обновление: вам также, вероятно, понадобится сделать
git fetch origin
(или,git fetch origin master
если вы хотите только эту ветку); это не должно иметь значения, если вы делаете это до или после сброса. (Спасибо, Эрик-Уокер)источник
reset --hard
.Вы можете сделать это одной командой:
Или в паре команд:
Обратите внимание, что вы потеряете ВСЕ ваши локальные изменения
источник
вуаля, теперь твой форк вернулся к тому же как вверх по течению.
источник
Теперь я наконец понял, что вместо
git fetch --all && git reset --hard origin/master
этого должно бытьgit fetch --all && git reset --hard origin/<branch_name>
вместо этого (если кто-то работает в другой ветке)источник