Как мне обновить разветвленный репозиторий GitHub? - PullRequest
3240 голосов
/ 30 августа 2011

Я недавно разработал проект и применил несколько исправлений.Затем я создал запрос извлечения, который затем был принят.

Через несколько дней другой участник внес другое изменение.Так что моя вилка не содержит этого изменения.

Как я могу получить это изменение в моей вилке?Нужно ли мне удалять и заново создавать мой форк, когда у меня появятся дальнейшие изменения?Или есть кнопка обновления?

Ответы [ 18 ]

8 голосов
/ 15 января 2016

Выполните следующие шаги. Я попробовал их, и это помогло мне.

Оформить заказ в вашем филиале

Синтаксис: git branch yourDevelopmentBranch
Пример: мастер git checkout

Извлечь ветку репозитория исходного кода для получения последней версии кода

Синтаксис: git pull https://github.com/tastejs/awesome-app-ideas master
Пример: git pull https://github.com/ORIGINAL_OWNER/ORIGINAL_REPO.git BRANCH_NAME

5 голосов
/ 08 сентября 2017

Я обновляю свои разветвленные репо одной строкой:

git pull https://github.com/forkuser/forkedrepo.git branch

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

5 голосов
/ 12 июня 2017

В качестве дополнения к этому ответу я искал способ обновить все удаленные ветви моего клонированного репо ( origin ) из восходящих веток за один раз. Вот как я это сделал.

Предполагается, что вы уже настроили восходящий удаленный указатель на репозиторий источника (где origin был разветвлен) и синхронизировали его с git fetch upstream.

Затем запустите:

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

В первой части этой команды перечислены все головы в upstream удаленном репо и удален SHA-1, за которым следует refs/heads/ префикс имени ветви.

Затем для каждой из этих ветвей она отправляет локальную копию восходящей ветви удаленного отслеживания (refs/remotes/upstream/<branch> на локальной стороне) непосредственно в удаленную ветку в origin (refs/heads/<branch> на удаленной стороне).

Любая из этих команд синхронизации веток может завершиться с ошибкой по одной из двух причин: либо ветка upstream была переписана, либо вы передали коммиты в этой ветке на вашу ветвь. В первом случае, когда вы ничего не добавили в ветку на своей вилке, безопасно нажимать принудительно (добавьте переключатель -f ; т. Е. git push -f в приведенной выше команде). В другом случае это нормально, так как ваша ветвь ветвления разошлась, и вы не можете ожидать, что команда sync будет работать, пока ваши коммиты не будут объединены обратно в upstream .

3 голосов
/ 10 марта 2018

Когда вы клонировали свой разветвленный репозиторий, перейдите в путь к каталогу, где находится ваш клон, и в несколько строк в вашем Git Bash Terminal.Все обновленные изменения в главном репозитории будут помещены в ваш репозиторий fork.

Команда «fetch» ​​необходима для того, чтобы оставаться в курсе проекта: только при выполнении «git fetch» ​​выпроинформированы об изменениях, которые ваши коллеги отправили на удаленный сервер.

Вы все еще можете посетить здесь для дальнейших запросов

3 голосов
/ 13 ноября 2017

Android Studio теперь научилась работать с вилочными репозиториями GitHub (вам даже не нужно добавлять «восходящий» удаленный репозиторий по команде консоли).

Открыть меню VCS Git

И обратите внимание на два последних пункта всплывающего меню:

  • Перебазировать мой форк GitHub

  • Создать запрос на извлечение

Попробуйте их.Я использую первый для синхронизации моего локального хранилища.В любом случае ветки из родительского удаленного репозитория («upstream») будут доступны в Android Studio после нажатия «Перебазировать мой GitHub fork», и вы сможете легко с ними работать.

(я использую AndroidStudio 3.0 с подключаемыми модулями Git и GitHub.

Enter image description here

1 голос
/ 23 апреля 2017

Это зависит от размера вашего репозитория и от того, как вы его разветвляли.

Если это довольно большой репозиторий, вы, возможно, хотели управлять им особым образом (например, история удаления).По сути, вы можете получить различия между текущей и исходной версиями, зафиксировать их, а затем снова выбрать «master».

Попробуйте прочитать this .В нем описывается, как обращаться с большими репозиториями Git и как добавлять их с последними изменениями.

0 голосов
/ 11 июня 2019

Если вы установите свой апстрим.Проверьте с git remote -v, тогда этого будет достаточно.

git fetch upstream
git checkout master
git merge --no-edit upstream/master
git push
0 голосов
/ 08 июня 2019

Есть две основные вещи, которые нужно поддерживать, чтобы ветвление хранилища всегда обновлялось навсегда.

1.Создайте ветви из мастера вилки и сделайте там изменения .

Так что, когда ваш Запрос на извлечение будет принят, вы можете безопасно удалить веткутак как ваш добавленный код будет жить в вашем мастере вашего разветвленного репозитория, когда вы обновите его с помощью апстрима.Таким образом, ваш мастер всегда будет в чистом состоянии, чтобы создать новую ветвь для другого изменения.

2.Создайте запланированное задание для мастера ветвления на обновите автоматически .

Это можно сделать с помощью cron .Вот пример кода, если вы делаете это в Linux.

$ crontab -e

поместите этот код на crontab file, чтобы выполнять задание ежечасно.

0 * * * * sh ~/cron.sh

, затем создайтеcron.sh файл сценария и git взаимодействия с ssh-agent и / или ожидают как показано ниже

#!/bin/sh
WORKDIR=/path/to/your/dir   
REPOSITORY=<name of your repo>
MASTER="git@github.com:<username>/$REPOSITORY.git"   
UPSTREAM=git@github.com:<upstream>/<name of the repo>.git  

cd $WORKDIR && rm -rf $REPOSITORY
eval `ssh-agent` && expect ~/.ssh/agent && ssh-add -l
git clone $MASTER && cd $REPOSITORY && git checkout master
git remote add upstream $UPSTREAM && git fetch --prune upstream
if [ `git rev-list HEAD...upstream/master --count` -eq 0 ]
then
    echo "all the same, do nothing"
else
    echo "update exist, do rebase!"
    git reset --hard upstream/master
    git push origin master --force
fi
cd $WORKDIR && rm -rf $REPOSITORY
eval `ssh-agent -k`

Проверьте ваш разветвленный репозиторий.Время от времени он всегда будет отображать это уведомление:

Эта ветвь даже с <upstream>: master .

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...