git відкиньте всі зміни та потягніть з верхнього течії


145

Як отримати репо за течією і змусити його замінити master? У мене на репо є лише одна гілка, яка є майстром, і я її повністю переплутав, тому мені в основному потрібно починати з вищого потоку. Я думаю, що init зробить роботу, але чи є простіший спосіб?

Відповіді:


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(докладніше про це на сторінках man)

Оновлення: вам, ймовірно, потрібно буде зробити git fetch origin(або git fetch origin masterякщо ви хочете лише цю гілку); не має значення, чи будете ви це робити до або після скидання. (Спасибі @ eric-walker)


1
Можливо, вам доведеться зробити тягнення після reset --hard.
Ерік Уокер

Не потрібно витягувати з головного моменту, коли запускається походження git перед скиданням.
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

voila, тепер ваша вилка повертається до такої ж, як і вище за течією.


0

Я нарешті зрозумів, що замість цього git fetch --all && git reset --hard origin/master, він повинен бути git fetch --all && git reset --hard origin/<branch_name>замість цього (якщо він працює на іншій гілці)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.