Как я могу Resync вилка из оригинала

Я только что разработал проект в Github. Я внес изменения и отправил запрос на удаление. Хозяин слил мою вилку с основным проектом и после этого сделал некоторые модификации. Так что пока мой форк не обновляется основным проектом. Я скучаю по модификациям, которые он сделал после слияния моего запроса на получение. Как я могу обновить мой форк главным проектом? Есть ли способ сделать это в веб-интерфейсе?

Спасибо

2 ответа

Решение

По своему дизайну разветвление проекта создает отдельный репо, который не обновляется при изменении исходного репо. Тем не мение, git делает это довольно легко обновить вручную.

Вам нужна помощь 3-го хранилища (достаточно локальной копии). Есть 3 репо:

  • "Upstream": репозиторий вышестоящего проекта на Github.
  • "Происхождение": хранилище вашей вилки на Github
  • "Local": ваш локальный репозиторий на вашем компьютере. Я предполагаю, что вы создали его путем клонирования Fork с помощью git clone git@github.com:your-username/projectname.git и что все используют ветку master,

Предполагая, что в настоящее время "Origin" и "Local" находятся в одном и том же состоянии, а "Upstream" опережает 1 или более коммитов (слияние и любые последующие изменения).

Сначала добавьте исходный проект в качестве удаленного Git:

git remote add upstream https://github.com/upstream-username/projectname.git

Затем извлеките (то есть извлекайте и затем объединяйте автоматически) изменения с пульта дистанционного управления. master перейти в текущий локальный репозиторий (master) ветка:

git pull upstream master

Теперь ваш локальный репозиторий синхронизирован с upstream, Наконец, добавьте ваше локальное хранилище на вашу вилку Github:

git push origin master

Теперь все синхронизировано.

Вам нужно добавить пульт (см. Справку GitHub) и извлечь его из этого нового пульта.

git remote add mainProject https://github.com/user/mainProject
git pull mainProject master

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

Краткий ответ: чтобы обновить ветвь с каждой веткой в ​​хранилище, выполните эту команду.

for branch in $(git ls-remote --heads upstream|sed 's#^.*refs/heads/##'); do git push origin refs/remotes/upstream/$branch:refs/heads/$branch; done

Чего это не делает, так это удаляет ветки с вашего форка, которые были удалены из апстрима. Нет никакого способа автоматизировать это, особенно если вы создали ветки на своем форке.

Другие вопросы по тегам