Синхронизация локального репозитория git с удаленным удалением с удалением локальных изменений/коммитов

Я не эксперт git, поэтому это может показаться глупым вопросом.

У меня есть локальные и удаленные репозитории, я хочу синхронизировать свой локальный с удаленным репозиторием. У меня много локальных изменений, спрятанные изменения и несколько коммитов, которые еще не нажаты на удаленный.

Одним из способов может быть удаление всех локальных изменений (с помощью git clean), отмена фиксации и fetch/pull с удаленного. Но я думаю, что должна быть какая-то одна команда, которая может сделать все это за один раз. Я попытался использовать git reset --hard HEAD, а затем git pull, но это дало мне:

# Your branch and 'origin/master' have diverged,
# and have 1 and 9 different commits each, respectively.

Смотрел этот вопрос, но не помог.

Ответ 1

Как прокомментировано, git reset --hard origin/master будет reset ваш master для восходящего потока.

Но: ваш текущий хозяин (с его локальным фиксацией) будет "потерян" (по крайней мере, больше не видно).

Итак, один шаг - не лучший подход.

Я бы рекомендовал что-то вроде:

git checkout master
git fetch origin
git branch tmp
git reset --hard origin/master
git checkout tmp
git rebase master
git checkout master
git merge tmp
git branch -d tmp

Таким образом, вы обновляете свои локальные фиксации поверх обновленного основного

x--x--x--x--x (master, origin/master)       x--x--x--x--x--y'--y' (tmp, master)
       \                                 =>
        y--y  (tmp)                           (after rebase+merge)

Ответ 2

git fetch -[options]

Checkout:

git fetch --help

для функций, которые вы можете использовать