Я форкнул репозиторий на Github. Я внес некоторые незначительные изменения и отправил запросы на вытягивание в апстрим, но по ходу мой форк стал настолько искаженным, что я не могу генерировать чистые запросы на вытягивание; когда я запускаю пул-реквест из ветки с шестью изменениями, Github хочет отправить тринадцать, причем семь из них уже существуют в восходящем направлении (natch).
Моя проблема, похоже, связана только с извлечением последних коммитов , но когда я создаю новую ветку и коммиты с вишневым выбором, у меня все еще есть дополнения. Я тоже поиграл с ребазингом , но теперь похоже, что даже мой мастер настолько испорчен, что я не могу создать чистую копию апстрима . Очевидно, это потому, что я не понимал, что мне нужно перебазировать вместо слияния , поэтому очевидно, что я сделал ошибки; что я пытаюсь сделать, так это выяснить, как распутать этот узел и вернуться в чистое состояние, в котором я могу двигаться вперед с пользой.
Я как бы хочу взорвать свою вилку и создать новую вилку восходящего потока, но я понимаю, что это тоже сложно.
Признавшись в своих грехах, связанных с Git, как мне получить отпущение грехов на GitHub?
Ответы:
Шаг 1. Извлечение изменений из восходящего потока
. Рекомендуется добавить вышестоящее репо как «восходящее», как описано на странице « Форк репо» :
--rebase
Опция помещает изменения поверх последний коммит без слияния.Шаг 2. (Необязательно) Объедините ваши коммиты в 1 коммит
Эта команда «отменит» все ваши коммиты, но не изменит файлы. Таким образом, вы можете зафиксировать все свои изменения за одну фиксацию.
Шаг 3. Проверьте и проверьте свои изменения
Чтобы показать изменения, используйте графический интерфейс, например встроенный
gitk
, Sourcetree , TortoiseGit или Tower (платный) и т. Д.Шаг 4: нажмите
git push
выдаст ошибку, потому что push изменит историю целевого репозитория.Если вы уверены, что изменения, показанные на шаге 3, верны, нажмите "-f"
Дополнительная информация
Команда для добавления пульта:
Вы также можете использовать прямой URL:
Но тогда вам понадобится хэш последней фиксации восходящего потока вместо «upstream / master» на других этапах.
источник
Насколько я понимаю, как с Git, так и с Mercurial (я использовал только последний, поэтому могу ошибаться) совсем несложно сдуть вилку и заново ее разветвить. Я делаю это все время со своими проектами. Если вы согласны с этим (можете создать резервную копию ваших изменений или у вас нет каких-либо существенных изменений в вашей вилке), я бы сказал, что это, вероятно, путь.
Помните, что с DVCS, разветвление хранилища делает полный клон , что весь репозиторий . Если вы удалите текущую вилку, а затем снова создадите исходное репо, у вас будет совершенно чистый лист для работы.
источник
git format-patch
для сохранения коммитов, которые хочу сохранить в первую очередь.git format-patch
для сохранения вашей работы является своего рода обходом всех полезных инструментов, которые git имеет для управления ветвями. В будущем использованиеgit rebase -i
для выборочной перезаписи ваших коммитов в верхней части новой восходящейmaster
ветки будет правильным решением.В своем частном репо добавьте репо форки как удаленное. Перебазируйте / сбросьте свои ветки из удаленных веток. Сделайте принудительный толчок к своему репозиторию github.
Если вам нужны точные команды, дайте мне знать. Также дайте мне знать, хотите ли вы попытаться сохранить локальные коммиты или "сдуть" - это нормально.
источник