Как я могу 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
Чего это не делает, так это удаляет ветки с вашего форка, которые были удалены из апстрима. Нет никакого способа автоматизировать это, особенно если вы создали ветки на своем форке.