Як я можу відновити вилку з оригіналу


33

Я щойно відіграв проект у Github. Я вніс зміни та надіслав запит на тягу. Власник з’єднав мою вилку з головним проектом і після цього вніс деякі зміни. Тож наразі моя вилка не оновлюється основним проектом. Я сумую за модифікаціями, які він зробив після об'єднання мого запиту на витяг. Як я можу оновити свою вилку за допомогою проекту «Основний»? Чи є спосіб зробити це у веб-інтерфейсі?

Спасибі


Пишу просту інструкцію. перегляньте тут: webapps.stackexchange.com/a/58140/63016
Youngjae

2
Зараз є офіційний документ, що добре зроблено: help.github.com/articles/syncing-a-fork
Андре Мірас

Відповіді:


36

За задумом, розгортання проекту створює окреме репо, яке не оновлюється при зміні початкового репо. Однак gitце дозволяє досить легко оновлювати вручну.

Вам потрібна допомога 3-го сховища (достатньо вашої локальної копії). Є 3 репости:

  • "Вгору за течією": сховище верхнього потоку проекту в Github.
  • "Походження": сховище вашого fork у Github
  • "Місцевий": ваше локальне сховище на вашому комп'ютері. Я вважаю, що ви створили його за допомогою клонування 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

Зараз все синхронізоване.


2
Велике спасибі .. прикро, що це не можливо зробити у веб-інтерфейсі ..
BAN

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

Еге! Я рвав волосся, намагаючись знайти цю явну інформацію. Дякую, що поділились!
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.