Created
March 1, 2018 06:17
-
-
Save JohnyDeath/ef8e62124f817ce16979e5a1ef7e635a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@ImHunter скорее всего у тебя у тебя в локальном репе связь установлена только с твоим форком. Убедиться в этом можно, выполнив команду git remote -v. В выводе будет две строки, начинающиеся с origin (вероятнее всего) и ведущие в твой форк. | |
Для начала надо добавить основной репозиторий (upstream) в список отслеживаемых удаленных репозиториев. Делается это командной git remote add upstream адрес-репы-на-гитхабе. После этого git remote -v должен выдать уже четыре строки, две для ориджина, две для апстрима. | |
Идем дальше. Нам необходимо "извлечь" информацию о состоянии веток в апстриме. Для этого служит команда git fetch upstream. Графические клиенты гита обычно этот шаг делают автоматически раз в н секунд. | |
Дальше мы переходим собственно к получению изменений. Тут есть два пути. | |
Путь первый - находясь в ветке девелоп выполнить команду git merge upstream/develop. Эта команда создаст мерж коммит - слияние веток, который надо потом запушить к себе в репу на гитхабе. Однако в этом случае, когда ты будешь делать новый пулл-реквест в апстрим, в истории изменений будут светиться эти мерж-коммиты, и без отдельных действий от принимающих пулл-реквест слить его с получением чистой истории уже не получится. Для упрощения этого есть путь два. | |
Вместо мержа можно выполнить жёсткий сброс состояния ветки с помощью команды git reset --hard upstream develop. Внимание! Это полностью откатит все локальные изменения на состояние коммита из апстрима. После этого можно начинать разработку. Если какие-то изменения уже есть, то вместо --hard можно указать --soft, тогда локальные изменения файлов сохранятся, но дерево коммитов сравнится с апстримом. | |
Если же в локальной истории есть уже несколько коммитов, которые не хочется терять, то можно воспользоваться путем 3. Его суть - использование механизма перемещения изменений. С помощью команды git rebase upstream/develop можно переместить коммиты из своей ветки над коммитами из ветки апстрима. Но надо аккуратно следить за тем, что получается в итоге. | |
Есть ещё четвёртый путь - cherry-pick, но я оставлю его в качестве домашнего задания и пары поломанных репозиториев. Ведь как известно, лучший способ понять гит - сломать и восстановить пять своих репозиториев. А потом ещё парочку. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment