Как очистить вилку Github, чтобы я мог делать чистые запросы?

Я разветкил репозиторий на Github. Я внес некоторые незначительные изменения и отправил запросы на выгрузку вверх по течению, но по пути моя вилка стала настолько искалеченной, что я не могу генерировать запросы на чистый запрос; когда я начинаю запрос на тягу из ветки с шестью изменениями, Github хочет представить тринадцать, причем семь из них уже существуют вверх по течению (natch).

Моя проблема, похоже, связана с только потянув за последние коммиты, но когда я создаю новую ветку и завитует, у меня все еще есть дополнительные функции. Я futzed с rebasing, но теперь он выглядит как мой мастер так что я не могу создать чистую копию upstream. По-видимому, это потому, что я не понимал, что мне нужно rebase вместо слияния, так что я сделал ошибки; то, что я пытаюсь сделать, - это выяснить, как развязать этот узел и вернуться в чистое состояние, где я могу двигаться вперед с пользой.

Я вроде хочу сдуть свою вилку и сделать новую вилку вверх по течению, но я понимаю, что это тоже сложно.

Признавшись в моих грехах Git, как мне получить отпущение github?

Ответ 1

Шаг 1: Потяните вверх по течению
Он рекомендовал добавить восходящее репо как "вверх по течению", как описано на странице Fork a Repo:

git pull --rebase upstream master

Опция --rebase помещает ваши изменения поверх последней фиксации без слияния.

Шаг 2: (Необязательно) Объедините свои фиксации в 1 commit

git reset --soft upstream/master

Эта команда "отменит" все ваши фиксации, но не изменит файлы. Таким образом, вы можете зафиксировать все свои изменения в одном коммите.

git commit -a

Шаг 3: Проверьте и протестируйте свои изменения

gitk

Для Mac OS X вы также можете использовать gitx.
А для Windows вы также можете использовать TortoiseGit "Показать журнал".

Шаг 4: Нажмите

git push выдаст ошибку, потому что нажатие изменит историю целевого репозитория. Если вы уверены, что изменения, показанные на шаге 3, являются правильным нажатием на "-f"

git push -f origin master


Дополнительная информация
Команда добавления пульта:

git remote add upstream git://github.com/[username]/[project].git

Вы также можете выбрать прямой URL:

git pull --rebase  git://github.com/[username]/[project].git

Но тогда вам понадобится хэш последнего восходящего коммита вместо "вверх по течению/мастеру" на других этапах.

Ответ 2

Как я понимаю, как с Git, так и с Mercurial (я использовал только последнее, так что, возможно, я ошибаюсь), это не большая проблема, чтобы сдуть вилку и перекрой ее. Я делаю это все время с моими проектами. Если вы согласны с этим (можете создавать резервные копии своих изменений или не иметь каких-либо существенных изменений в своей вилке), я бы сказал, что, вероятно, это способ.

Помните, что с помощью DVCS форматирование репозитория делает полный клон всего репо. Если вы удалите свою текущую вилку, а затем снова измените исходное репо, у вас будет полностью чистый сланец для работы.

Ответ 3

На своем частном репо добавьте forkee repo в качестве удаленного. Rebase/ reset ваши ветки из удаленных веток. Сделайте силовое нажатие на ваш ретранслятор github.

Если вам нужны точные команды, дайте мне знать. Также дайте мне знать, хотите ли вы попытаться сохранить локальные коммиты или если "сдуть" в порядке.