Как reset главная ветвь git в ветку восходящего потока в разветвленном репозитории?

Я полностью испортил основную ветвь моего разветвленного 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 [email protected]:$ORIGIN.git
$ cd $REPO
$ git checkout master
$ git remote add upstream [email protected]:$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 [email protected]:$ORIGIN.git
$ cd $REPO
$ git checkout master
$ git remote add upstream [email protected]:$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.