Git витягує гілку з іншого сховища?


86

У мене є локальне сховище 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.

Як я можу це зробити?

Відповіді:


156

Потрібно переконатися, що це 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-сторінок" з іншого репо!
Марчелло де Продаж

37

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

git checkout --orphan fork_branch
git reset --hard
git pull <url of fork> <branch>

2
Дякую за це, у мене є закладки та постійно до цього повертаюся!
Шейн Смісколь,

2
Найкраща відповідь на 2020 рік
Diamond
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.