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


33

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

Благодарность


Я пишу простую инструкцию. проверить здесь: webapps.stackexchange.com/a/58140/63016
Youngjae

2
Теперь есть официальный документ, который хорошо сделан: help.github.com/articles/syncing-a-fork
Андре Мирас,

Ответы:


36

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

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

  • «Upstream»: репозиторий вышестоящего проекта на Github.
  • «Происхождение»: хранилище вашей вилки на Github
  • «Local»: ваш локальный репозиторий на вашем компьютере. Я предполагаю , что вы создали его клонирование вилки с помощью 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ветви в ветку current ( master) вашего локального репозитория :

git pull upstream master

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

git push origin master

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


2
Большое спасибо ... это позор, что это не возможно сделать это в веб-интерфейсе ..
BAN

1
Это действительно возможно в веб-интерфейсе: webapps.stackexchange.com/a/31010/10390
thSoft

YeeHaw! Я рвал на себе волосы, пытаясь найти эту явную информацию. Спасибо, что поделился!
pepoluan

... но, пожалуйста, взгляните также на комментарии к ответу, доказывающие, что Resync через Интернет - не лучший вариант, так как он загрязняет репозиторий
usr-local-ΕΨΗΕΛΩΝ

что вы делаете, когда он говорит «уже в курсе» после тяги, но это явно не так? (есть файлы, которые я изменил все в одном подкаталоге, и у меня не должно быть никаких различий в любом другом файле, но я делаю)
roberto tomás

1

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

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

0

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.