Відстежте нову віддалену гілку, створену на GitHub


183

У мене вже є місцева головна гілка, яка відстежує віддалену головну гілку проекту github. Тепер мій співробітник створив нову гілку в тому ж проекті, і я хочу зробити наступне:

  1. створити нову гілку на місцевому рівні
  2. зробити цю нову гілку відстежувати щойно створену віддалену гілку.

Як мені це зробити правильно?


2
git checkout --track -b <локальне відділення> <remote> / <відслідковане відділення> також працює.
MLister

14
... або просто git checkout -t <remote>/<whatever>. Якщо у вас є лише одна гілка дистанційного відстеження, яка закінчується, <whatever>ви навіть можете просто робити git checkout <whatever>і вгадувати, що ви маєте на увазі.
Марк Лонгейр

Відповіді:


251
git fetch
git branch --track branch-name origin/branch-name

Перша команда гарантує, що у локальному сховищі є віддалене відділення. Друга команда створює локальну гілку, яка відстежує віддалену гілку. Це передбачає, що ваше віддалене ім’я є originі назва філії branch-name.

--track опція включена за замовчуванням для віддалених гілок, і ви можете її опустити.


3
Коли я це роблю, я отримую попередження: перейменування "назва гілки" неоднозначне.
Ультрасавр

19
Якщо є лише одна віддалена гілка з цією назвою гілки, ви можете просто зробити, git checkout <branchname>і git автоматично перевірить її та встановить гілку відстеження. Просто хотів повторити те, що @Mark Longair сказав вище в цьому коментарі: stackoverflow.com/questions/11262703/… .
Райан Уоллс

Назва моєї віддаленої філії remotes/origin/develop? Чи не повинно бути просто origin/develop? Ці однакові?
ア レ ッ ク ス

2
Мені довелося це зробити git fetch --all, інакше нові гілки не будуть отримані
mschrimpf

Як це зробити в Eclipse? Коли я закінчу з цим cmd, затемнення виявляють нову гілку?
Декард

31

Якщо у вас немає локальної філії, вона справді така проста, як:

git fetch
git checkout <remote-branch-name>

Наприклад, якщо ви отримуєте нову гілку віддаленого відстеження під назвою origin/feature/Main_Page, просто зробіть це:

git checkout feature/Main_Page

Це створює локальну гілку з тією ж назвою, що й віддалену гілку, відстежуючи цю віддалену гілку. Якщо у вас є кілька віддалених пристроїв з однаковою назвою гілки, ви можете використовувати менш неоднозначні:

git checkout -t <remote>/<remote-branch-name>

Якщо ви вже зробили локальну гілку і не хочете її видалити, див Як зробити існуючу гілку Git відстеженням віддаленою гілкою? .


1
git checkout 1.5-branch( remotes/upstream/1.5-branchє у виході з git branch -a) призводить до error: pathspec '1.5-branch' did not match any file(s) known to git.зміни цього git checkout upstream/1.5-branchрезультату у відокремленій HEAD, а локальна гілка не створюється. Я думаю, що ця частина відповіді просто неправильна. Це з git 2.4.3
Piotr Dobrogost

Перша команда працює для мене в git 1.9.3, навіть для різних дистанційних. Можливо, така поведінка змінилася. Результат вашої другої команди - це те, чого я очікував. Без -t, ви не вказуєте, що хочете робити щось інше, ніж дивитись на цю конкретну версію на пульті.
kotoole

1
Я погоджуюся з @PiotrDobrogost, я вважаю, що ваше твердження "Це створює локальну гілку з такою ж назвою ..." помиляється. Що буде робити (якщо його називають таким чином), це створити гілку відстеження для кожної гілки на віддаленому. Це означає філію вашого місцевого репо-імені <remote>/<branch>. Віддалене відділення відстеження є лише для читання, вказуючи, де ця гілка була на віддаленому нарешті. Якщо зателефонувати checkoutна цю гілку, ви перейдете до режиму окремої головки, як каже Пьотр. Зауважте, що визначення віддаленої гілки для отримання дозволяє уникнути створення небажаних гілок відстеження.
скан.

2
Щоб ще раз було зрозуміло: я пропоную використовувати команду git checkout feature-branch. Я НЕ пропоную використовувати команду, git checkout origin/feature-branch яка, як ви обоє вказали, призведе до непомітної відстороненої голови.
kotoole

набагато простіше і до речі. Чудово працює з git 2.8.3 на cygwin.
Феліпе Альварес

29

Перш за все, ви повинні отримати віддалене сховище:

git fetch remoteName

Тоді ви можете створити нову гілку та налаштувати її для відстеження потрібної віддаленої гілки:

git checkout -b newLocalBranch remoteName/remoteBranch

Ви також можете використовувати "git branch --track" замість "git checkout -b" як вказано макс.

git branch --track newLocalBranch remoteName/remoteBranch

Якщо ви checkout -bвикористовуєте віддалену гілку як початкову точку, тоді це фактично непотрібно --track.

5
Крім того, як зазначено в цьому коментарі , якщо ви просто зробите це git checkout <branchname>, і є віддалена гілка з такою ж назвою (після того, як ви зробили це git fetch), то локальна гілка автоматично буде налаштована для відстеження віддаленої.

9

Якщо відділення не є віддаленою гілкою, ви можете натиснути свою локальну гілку безпосередньо до віддаленої.

git checkout master
git push origin master

або коли у вас є галузь розробки

git checkout dev
git push origin dev

або коли існує віддалений відділення

git branch dev -t origin/dev

Є кілька інших можливостей, щоб просунути віддалену гілку.


Тоді ви берете третій варіант. Коли віддалена гілка існує, ви можете створити локальну гілку та відслідковувати віддалену гілку :) її таку ж, що й версія від max, але коротше.
Рене Хёле
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.