Перезапись моего локального ветки с удаленной ветвью

Я полностью fubar'd мой локальный филиал, и хотел бы начать все заново. Версия на сервере верна.

Я не хочу начинать сначала, я бы хотел использовать свою локальную историю, чтобы исправить мою огромную ошибку. (Я могу, если придется.)

git fetch branchname и git pull branchname не работают. Сообщение, которое я получаю, является "обновленным", однако моя локальная версия не совпадает с моей версией сервера.

git pull origin/branchname дает ошибку "не найден".

Ответ 1

сначала создайте новую ветку в текущей позиции (в случае, если вам понадобится ваша старая история):

git branch fubar-pin

обновить список удаленных веток и синхронизировать новые коммиты:

git fetch --all

тогда reset ваша ветка до точки, где origin/branch указывает на:

git reset --hard origin/branch

будьте осторожны, это приведет к удалению любых изменений с вашего рабочего дерева!

Ответ 2

Что я делаю, когда испортил свою локальную ветвь, я просто переименую свою разбитую ветку и снова проверяю/разветвляю ветку вверх:

git branch -m branch branch-old
git fetch remote
git checkout -b branch remote/branch

Тогда, если вы уверены, что ничего не хотите от своей старой ветки, удалите ее:

git branch -D branch-old

Но обычно я оставляю старую ветку локально, на всякий случай у меня что-то есть.

Ответ 3

В вашем местном филиале есть изменения, которые вы хотите отменить. Для этого вам нужно использовать git reset to reset ветвь ветки до последнего пятна, которое вы отклонили от ветки репо. Используйте git branch -v, чтобы найти идентификатор sha1 в ветке вверх по течению, и reset ваша ветка использует его с помощью git reset SHA1ID. Затем вы сможете сделать git checkout, чтобы отменить изменения, оставленные в вашем каталоге.

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