Очистите вилку и перезапустите ее из восходящего потока

Я разветкил репозиторий, затем сделал некоторые изменения, и похоже, что я испортил все.

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

Ответ 1

Простейшим решением могло бы быть (используя 'upstream' как удаленное имя, ссылающееся на исходное разворот репо):

git remote add upstream /url/to/original/repo
git fetch upstream
git checkout master
git reset --hard upstream/master  
git push origin master --force 

(Подобно этому Страница GitHub, раздел "Что делать, если Im в плохой ситуации?" )

Имейте в виду, что вы можете потерять изменения, сделанные в ветке master (как локально, так и из-за reset --hard, так и на удаленной стороне, из-за push --force).

Альтернативой было бы, если вы хотите сохранить свои коммиты на master, чтобы воспроизвести эти коммиты поверх текущего upstream/master.
Замените часть reset на git rebase upstream/master. Затем вам нужно будет принудительно нажать.
См. Также " Что делать, если Im в плохой ситуации?"


Более полное решение, поддерживающее вашу текущую работу (на всякий случай), подробно описано в разделе Очистка git master branch и переместить некоторую фиксацию в новую ветку".

См. также "Потяните новые обновления из оригинального репозитория GitHub в разветвленный репозиторий GitHub" для иллюстрации того, что "upstream".

upstream


Примечание: последние репозитории GitHub do защищают ветвь master от push --force.
Поэтому сначала вам нужно сначала защитить master (см. Рисунок ниже), а затем повторно защитить его после принудительного нажатия).

введите описание изображения здесь

Ответ 2

Любовь VonC ответ. Здесь легкая версия для начинающих.

Существует git удаленный вызов origin, который, я уверен, вы все знаете. В принципе, вы можете добавить столько ремотов в репозиторий git, сколько захотите. Итак, что мы можем сделать, это ввести новый пульт, который является оригинальным репо, а не вилкой. Мне нравится называть его original

Добавьте добавление исходного репо к нашей вилке в качестве удаленного.

git remote add original https://git-repo/original/original.git

Теперь позвольте получить исходное репо, чтобы убедиться, что у нас есть последняя закодированная

git fetch original

Как и предлагалось VonC, убедитесь, что мы на хозяине.

git checkout master

Теперь, чтобы довести нашу вилку до скорости с последним кодом на исходном репо, все, что нам нужно сделать, это тяжелая reset наша главная ветвь в соответствии с исходным пультом.

git reset --hard original/master

И все готово:)

Ответ 3

После @VonC отличный ответ. Новая политика GitHub не позволяет "принудительно нажимать" на мастера. Если вы получите сообщение об ошибке, подобное этому, попробуйте выполнить следующие действия. remote: error: GH003: Sorry, force-pushing to master is not allowed.

Для эффективной reset вашей вилки вам необходимо выполнить следующие действия:

git checkout master
git reset --hard upstream/master
git checkout -b tmp_master
git push origin

Откройте свою вилку на GitHub, в разделе "Настройки → Филиалы → ветка по умолчанию" выберите "новый_мастер" в качестве новой ветки по умолчанию. Теперь вы можете принудительно нажать на ветвь "master":

git checkout master
git push --force origin

Затем вы должны вернуть "master" в качестве ветки по умолчанию в настройках GitHub. Чтобы удалить 'tmp_master':

git push origin --delete tmp_master
git branch -D tmp_master

Другие ответы, предупреждающие о потере ваших изменений, по-прежнему применяются, быть полезными.