Как очистить мою вилку Github, чтобы я мог делать запросы на чистое извлечение? - PullRequest
80 голосов
/ 23 мая 2011

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

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

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

Исповедуя свои грехи в Гит, как мне получить отпущение грехов в Гитхубе?

Ответы [ 3 ]

98 голосов
/ 24 мая 2011

Шаг 1: Извлечь изменения вверх по течению
Рекомендуется добавить репозиторий в восходящем направлении как «восходящий», как описано на странице Форк репо :

git pull --rebase upstream master

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

Шаг 2: (Необязательно) Объедините ваши коммиты в 1 коммит

git reset --soft upstream/master

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

git commit -a

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

Для отображения изменений используйте графический интерфейс, например, встроенный gitk, Sourcetree , TortoiseGit или Tower (платный) и т. д.

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

git push выдаст ошибку, потому что 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

Но тогда вам понадобится хеш последней восходящей фиксации вместо "upstream / master" на других шагах.

4 голосов
/ 24 мая 2011

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

0 голосов
/ 24 мая 2011

В вашем личном репо добавьте репозиторий forkee в качестве удаленного. Перебазируйте / сбрасывайте свои ветви из веток пульта. Сделайте принудительный толчок к вашему репозиторию github.

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

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