Извлекать новые обновления из исходного репозитория GitHub в разветвленный репозиторий GitHub.
Я разбудил чей-то репозиторий на GitHub и хотел бы обновить мою версию коммитами и обновлениями, сделанными в оригинальном репозитории. Они были сделаны после того, как я раздвоил свою копию.
Как я могу извлечь изменения, которые были сделаны в источнике, и включить их в мой репозиторий?
5 ответов
Вы должны добавить исходный репозиторий (тот, который вы разветвляли) в качестве удаленного.
Со страницы руководства по вилке GitHub:
Как только клон будет завершен, в вашем репо появится пульт с именем "
origin
", Который указывает на вашу развилку на GitHub.
Не позволяйте названию сбить вас с толку, это не указывает на исходный репо, с которого вы ответили. Чтобы помочь вам следить за этим репо, мы добавим еще один пульт с именем "upstream":
$ cd github-services
$ git remote add upstream git://github.com/pjhyett/github-services.git
$ git fetch upstream
# then: (like "git pull" which is fetch + merge)
$ git merge upstream/master master
# or, better, replay your local work on top of the fetched branch
# like a "git pull --rebase"
$ git rebase upstream/master
У вас также есть рубиновый гем, который может облегчить эти операции GitHub.
Смотрите также " Git fork - это git clone? ".
В дополнение к ответу VonC, вы можете настроить его по своему вкусу.
После извлечения из удаленной ветви вам все равно придется объединить коммиты. Я бы заменил
$ git fetch upstream
с
$ git pull upstream master
поскольку git pull по сути является git fetch + git merge.
Использование:
git remote add upstream ORIGINAL_REPOSITORY_URL
Это установит ваш апстрим к репозиторию, из которого вы разветвлены. Затем сделайте это:
git fetch upstream
Это приведет к извлечению всех ветвей, включая master, из исходного хранилища.
Объедините эти данные в вашей локальной ветке master:
git merge upstream/master
Вставьте изменения в ваш разветвленный репозиторий, т.е. в источник:
git push origin master
Вуаля! Вы закончили синхронизацию с исходным хранилищем.
Это видео показывает, как обновить форк напрямую с GitHub.
шаги:
- Откройте вилку на GitHub.
- Нажмите на
Pull Requests
, - Нажмите на
New Pull Request
, По умолчанию GitHub будет сравнивать оригинал с вашим форком, и не должно быть ничего для сравнения, если вы не внесли никаких изменений. - Нажмите на
switching the base
, Теперь GitHub будет сравнивать ваш форк с оригиналом, и вы должны увидеть все последние изменения. - Нажмите на
Create a pull request
для этого сравнения и назначьте предсказуемое имя для вашего запроса извлечения (например, Обновить с оригинала). - Нажмите на
Create pull request
, - Прокрутите вниз и нажмите
Merge pull request
и наконецConfirm
слияния. Если на вашем форке не было никаких изменений, вы сможете объединить его автоматически.
Если вы хотите сделать это без cli, вы можете сделать это полностью на сайте Github.
- Перейдите в репозиторий вашей вилки.
- Нажмите на
New pull request
. - Обязательно установите вилку в качестве базового репозитория, а исходный (вышестоящий) репозиторий в качестве головного репозитория. Обычно вы хотите синхронизировать только основную ветку.
Create new pull request
.- Щелкните стрелку справа от кнопки слияния и убедитесь, что вы выбрали перебазирование вместо слияния. Затем нажмите кнопку. Таким образом, это не приведет к ненужной фиксации слияния.
- Готово.
Если вам нечего терять, вы также можете просто удалить вилку, просто зайдите в настройки... перейдите в раздел опасной зоны ниже и нажмите Удалить репозиторий. Он попросит вас ввести имя репозитория и ваш пароль после. После этого вы снова просто разветвляете оригинал.
Если вы используете настольное приложение GitHub, в правом верхнем углу есть кнопка синхронизации. Тогда нажмите на него Update from <original repo>
около верхнего левого.
Если нет синхронизируемых изменений, это будет неактивно.
Вот несколько скриншотов, чтобы сделать это легко.
Чтобы автоматически синхронизировать ваш разветвленный репозиторий с родительским репозиторием, вы можете использовать приложение Pull на GitHub.
Дополнительные сведения см. В файле Readme.
Для дополнительной настройки, при которой вы хотите сохранить изменения, внесенные в разветвленный репозиторий, обратитесь к моему ответу на аналогичный вопрос здесь.