Очистите вилку и перезапустите ее из восходящего потока
Я разветкил репозиторий, затем сделал некоторые изменения, и похоже, что я испортил все.
Я хочу начать его снова с нуля, используя текущий восходящий/ведущий в качестве базы для моей работы.
Должен ли я перезагрузить мой репозиторий или вообще удалить его?
Ответы
Ответ 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
Другие ответы, предупреждающие о потере ваших изменений, по-прежнему применяются, быть полезными.