Git тянет ветку из другого репозитория?

87

У меня есть локальный репозиторий git, который является клоном репозитория на github. Кто-то разветвил репозиторий и внес изменения в новую ветку в новом репозитории. Я хочу переместить эту новую ветку в свой репозиторий (локально, чтобы сначала поработать над ней перед слиянием с главной).

Я попытался создать новую ветку, а затем извлечь ее из разветвленного репозитория, но он жалуется, потому что новая ветка является копией основной ветки, а также изменения локального файла, поэтому он говорит

error: Your local changes to the following files would be overwritten by merge.

Итак, как я могу перетащить ветку из другого репозитория в новую ветку в моем локальном репозитории?

Я надеюсь, что в этом есть смысл. Если нет, то это мой репозиторий: https://github.com/MatthewLM/cbitcoin

Как видите, кто-то создал новый репозиторий с веткой «linuxBuild»: https://github.com/austonst/cbitcoin/tree/linuxBuild

Мне нужна эта ветка в моем локальном репозитории для MatthewLM / cbitcoin.

Как я могу это сделать?

Мэтью Митчелл
источник

Ответы:

157

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


Если вы хотите воссоздать структуру ветвей вилки в локальном репозитории, вы можете сделать следующее:

git remote add fork <url of fork>
git fetch fork
git checkout -b fork_branch fork/<branch>

Это создаст локальную ветвь fork_branchс той же историей, что и <branch>в вилке, то есть fork_branchбудет ответвляться от вашей, masterгде находится <branch>в вилке. Кроме того, ваша локальная ветка теперь будет отслеживать эту ветвь в вилке, поэтому вы можете легко внести новые изменения, зафиксированные в вилке.

Думаю, вам еще нужно заранее убедиться, что ваша рабочая копия не содержит никаких изменений.

Дэниел Хилгарт
источник
Хорошо, спасибо. Это было бы здорово, если бы я хотел свои локальные изменения и коммиты, которых нет в ветке из вилки. Но что, если я хочу, чтобы новая ветка была точно такой же, как в репозитории вилки? Это включает в себя удаление любых коммитов из моего собственного репозитория после того, как произошла форк для этой новой ветки. Таким образом, это было бы так, как если бы ветка была сделана в моем собственном репозитории, а не в разветвленной.
Мэтью Митчелл
Что ж, ваш ответ - приемлемое решение для того, что мне нужно сделать, но я бы нашел его более простым, если бы я мог вытащить новую ветку в репозиторий. Я подожду немного, чтобы узнать, что скажут другие.
Мэтью Митчелл
@MatthewMitchell: Пожалуйста, проверьте обновления. Это то, что вы искали?
Дэниел Хилгарт
Что ж, я использовал метод слияния его с другой веткой (я просто слил ее с мастером) в конце, но в случае, когда мне просто нужна ветка точно такая, как она из другого репозитория, я попробую получить и способ оформления заказа, который вы описали. Спасибо.
Мэтью Митчелл
Используется для переноса другой ветки "gh-pages" из другого репо!
Марчелло де Салес
38

Метод без добавления удаленного.

git checkout --orphan fork_branch
git reset --hard
git pull <url of fork> <branch>
Alex78191
источник
2
Спасибо за это, я добавил его в закладки и продолжаю к нему возвращаться!
Шейн Смискол
2
Лучший ответ на 2020 год
Diamond,