Я полностью испортил основную ветвь моего разветвленного git репо.
Я хочу полностью reset основную ветвь, которая была перенесена на мою вилку с содержимым основного репо-процесса вверх. Я не заинтересован в сохранении изменений в мастер-ветке или истории.
Простейшим подходом было бы удаление моего разветвленного репо и refork из проекта вверх. Тем не менее, у меня есть работа в других толкаемых ветвях, которые я не хочу потерять.
Итак, как я reset моя нажатая главная ветвь с ведущим мастером?
git clone https://myrepo.git
cd myrepo
git remote add upstream https://upstream.git
git fetch upstream
Где я могу перейти отсюда к reset моим локальным и удаленным ведущим ветвям с ведущим ведущим?
Ответ 1
Вы можете сбросить вашу локальную главную ветку на исходную версию и отправить ее в свой репозиторий.
Предполагая, что "upstream" - это исходный репозиторий, а "origin" - ваш форк:
# ensures current branch is master
git checkout master
# pulls all new commits made to upstream/master
git pull upstream master
# this will delete all your local changes to master
git reset --hard upstream/master
# take care, this will delete all your changes on your forked master
git push origin master --force
(Вы можете определить исходное репо как "upstream" с помощью git remote add upstream/url/to/original/repo
.)
Ответ 2
Это будет reset ваша главная ветка с ведущим ведущим, и если ветка обновлена, так как вы ее разветвляли, она также потянула бы эти изменения.
git checkout master
git reset upstream/master
git pull --rebase upstream master
git push origin master --force
PS: Предполагая, что Upstream является исходным репо, а источником является ваша копия.
Ответ 3
Я попробовал метод, как это:
$REPO=<repo>
$ORIGIN=<user>/$REPO
$UPSTREAM=<upstream>/$REPO
$ git clone git@github.com:$ORIGIN.git
$ cd $REPO
$ git checkout master
$ git remote add upstream git@github.com:$UPSTREAM.git
$ git reset --hard upstream/master
$ git pull --rebase upstream master
$ git push origin master --force
на выходе появится предупреждение:
fatal: ambiguous argument 'upstream/master':
unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
Таким образом, правильный путь - git pull
перед git reset
:
$ git clone git@github.com:$ORIGIN.git
$ cd $REPO
$ git checkout master
$ git remote add upstream git@github.com:$UPSTREAM.git
$ git pull --rebase upstream master
$ git reset --hard upstream/master
$ git push origin master --force
тогда вывод будет таким:
From github.com:<upstream>/<repo>
* branch master -> FETCH_HEAD
* [new branch] master -> upstream/master
HEAD is now at 7a94b1790 Merge pull request #4237 from <upstream>/...
Current branch master is up to date.
Everything up-to-date.