Як перевірити віддалену гілку Git?

Хтось натиснув гілка з ім'ям test з git push origin test до загального репозиторій. Я бачу гілку з git branch -r .

Тепер я намагаюся перевірити віддалену гілку test .

Я пробував:

  • git checkout test , який нічого не робить

  • git checkout origin/test дає * (no branch) . Це збиває з пантелику. Як я можу бути на "ніякої гілці"?

Як перевірити віддалену гілку Git?

5758
23 нояб. заданий Juri Glass 23 нояб. 2009-11-23 17:23 '09 о 17:23 2009-11-23 17:23
@ 26 відповідей

оновити

Відповідь Якуба на насправді покращує це. З версіями Git ≥ 1.6.6 з одним пультом ви можете просто:

 git fetch git checkout test 

Як зазначає користувач masukomi в коментарі, git checkout test НЕ буде працювати в сучасному git, якщо у вас кілька пультів. У цьому випадку використовуйте

 git checkout -b test <name of remote>/test 

або стенографія

 git checkout -t <name of remote>/test 

Старий відповідь

Перш ніж ви зможете почати локальну роботу з віддаленої гілкою, вам потрібно отримати її, як зазначено у відповідях нижче.

Щоб отримати гілку, вам просто потрібно:

 git fetch origin 

Це принесе вам всі видалені гілки. Ви можете побачити гілки, доступні для оформлення замовлення з:

 git branch -v -a 

Тепер, коли у вас є віддалені гілки, вам потрібно перевірити інформацію, що цікавить вас гілку, надавши вам локальну робочу копію:

 git checkout -b test origin/test 
7947
23 нояб. відповідь дан hallski 23 нояб. 2009-11-23 17:26 '09 о 17:26 2009-11-23 17:26

Sidenote: З сучасним Git (> = 1.6.6 ) ви можете використовувати тільки

 git checkout test 

(зверніть увагу, що це 'test' not 'origin / test') для виконання магічного DWIM -mery і створіть для вас локальну гілка 'test', для якої висхідний потік був би гілкою віддаленого відстеження "origin / test".

border=0

Висновок * (no branch) in git branch означає, що ви перебуваєте в неназваною гілки в так званому стані "від'єднаний HEAD" (HEAD вказує безпосередньо на фіксацію і не є символічною посиланням на деяку локальну гілка). Якщо ви зробили деякі коммітов в цій неназваною гілки, ви завжди можете створити локальну гілка з поточної фіксацією:

 git checkout -b test HEAD 
тисяча сто сорок сім
24 нояб. відповідь дан Jakub Narębski 24 нояб. 2009-11-24 03:17 '09 в 3:17 2009-11-24 3:17

В цьому випадку ви, ймовірно, захочете створити локальну гілка test , яка відстежує віддалену гілку test :

 $ git branch test origin/test 

У більш ранніх версіях git вам знадобилася явна опція --track , але це значення за замовчуванням тепер, коли ви розгалужується віддалену гілку.

508
23 нояб. відповідь дан ndim 23 нояб. 2009-11-23 17:27 '09 о 17:27 2009-11-23 17:27

Прийнятий відповідь не працює для вас?

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

 $ git checkout -b remote_branch origin/remote_branch 

fatal: git checkout: шляхи відновлення несумісні з комутаційними гілками.
Ви мали намір перевірити "origin / remote_branch", який не може бути вирішений як commit?

Рішення

Якщо ви отримали це повідомлення, ви повинні спочатку зробити git fetch origin , де origin - ім'я віддаленого сховища до запуску git checkout remote_branch . Ось повний приклад з відповідями:

 $ git fetch origin remote: Counting objects: 140, done. remote: Compressing objects: 100% (30/30), done. remote: Total 69 (delta 36), reused 66 (delta 33) Unpacking objects: 100% (69/69), done. From https://github.com/githubuser/repo-name e6ef1e0..5029161 develop -> origin/develop * [new branch] demo -> origin/demo d80f8d7..359eab0 master -> origin/master $ git checkout demo Branch demo set up to track remote branch demo from origin. Switched to a new branch 'demo' demo from origin $ git fetch origin remote: Counting objects: 140, done. remote: Compressing objects: 100% (30/30), done. remote: Total 69 (delta 36), reused 66 (delta 33) Unpacking objects: 100% (69/69), done. From https://github.com/githubuser/repo-name e6ef1e0..5029161 develop -> origin/develop * [new branch] demo -> origin/demo d80f8d7..359eab0 master -> origin/master $ git checkout demo Branch demo set up to track remote branch demo from origin. Switched to a new branch 'demo' 

Як ви можете бачити, при запуску git fetch origin витягнутих віддалених гілок ми ще не налаштували відстеження на нашій локальній машині. Звідти, так як тепер у нас є посилання на віддалену гілку, ми можемо просто запустити git checkout remote_branch , і ми отримаємо переваги віддаленого відстеження.

421
07 дек. відповідь дан Corey Ballou 07 дек. 2012-12-07 23:52 '12 о 23:52 2012-12-07 23:52

Я спробував вищевказане рішення, але воно не спрацювало. Спробуйте це, він працює:

 git fetch origin 'remote_branch':'local_branch_name' 

Це призведе до віддаленої гілці і створить нову локальну гілка (якщо вона вже не існує) з ім'ям local_branch_name і відстежить її віддалений.

208
18 окт. відповідь дан Sahil kalra 18 Жовтня. 2013-10-18 08:55 '13 о 8:55 2013-10-18 8:55

Це буде DWIM для віддаленого імені без імені ( документація ):

 $ git checkout -t remote_name/remote_branch 

Щоб додати новий пульт дистанційного керування, вам необхідно зробити наступне:

 $ git remote add remote_name location_of_remote $ git fetch remote_name 

Перший повідомляє Git віддалений доступ, другий отримує коммітов.

104
28 апр. відповідь дан tacaswell 28 Квітня. 2012-04-28 01:37 '12 в 1:37 2012-04-28 1:37

Використання:

 git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME> 

Інші відповіді не працюють з сучасними Git в моєму доброкачественном випадку. Можливо, вам буде потрібно перенести спочатку, якщо віддалена гілка нова, але я не перевірив цей випадок.

98
21 февр. відповідь дан matanster 21 февр. 2016-02-21 13:58 '16 о 13:58 2016-02-21 13:58

Добре, відповідь проста ... Ви в основному бачите гілку, але у вас ще немає локальної копії! ...

Вам потрібно fetch гілку ...

Ви можете просто отримати, а потім оформити замовлення в гілці, використовуючи команду з одного рядка нижче, щоб зробити це:

 git fetch  git checkout test 

Я також створив зображення нижче, щоб ви могли поділитися своїми відмінностями, подивитися, як працює fetch а також як його pull :

2019

05 сент. відповідь дан Alireza 05 сент. 2017-09-05 17:20 '17 о 17:20 2017-09-05 17:20

Щоб клонувати репозиторій Git, виконайте:

 git clone <either ssh url /http url> 

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

 git checkout -t origin/future_branch (for example) 

Ця команда перевіряє віддалену гілку, а ваше ім'я локальної гілки буде таким же, як віддалена гілка.

Якщо ви хочете перевизначити ім'я локального гілки в касі:

 git checkout -t -b enhancement origin/future_branch 

Тепер ваше ім'я локальної гілки enhancement , але ваше ім'я віддаленої гілки future_branch .

документація

48
21 янв. відповідь дан Madhan Ayyasamy 21 Січня. 2013-01-21 13:04 '13 о 13:04 2013-01-21 13:04

Ви можете спробувати

 git fetch remote git checkout --track -b local_branch_name origin/branch_name 

або

 git fetch git checkout -b local_branch_name origin/branch_name 
31
24 марта '14 в 16:11 2014-03-24 16:11 відповідь дан uma 24 березня '14 о 16:11 2014-03-24 16:11

По-перше, вам потрібно зробити:

git fetch # Якщо ви не знаєте ім'я гілки

 git fetch origin branch_name 

По-друге, ви можете перевірити віддалений філія на свій локальний:

 git checkout -b branch_name origin/branch_name 

-b створить нову гілку в зазначеному імені з обраної віддаленої гілки.

27
18 мая '17 в 16:55 2017-05-18 16:55 відповідь дан Mohideen ibn Mohammed 18 травня '17 о 16:55 2017-05-18 16:55

команди

 git fetch --all git checkout -b <ur_new_local_branch_name> origin/<Remote_Branch_Name> 

рівні

  git fetch --all 

а потім

  git checkout -b fixes_for_dev origin/development 

Обидва створять latest fixes_for_dev з development

25
21 апр. відповідь дан sreekumar 21 Квітня. 2016-04-21 22:10 '16 о 22:10 2016-04-21 22:10

Я використовую наступну команду:

 git checkout --track origin/other_remote_branch 
23
06 сент. відповідь дан priyankvex 06 сент. 2017-09-06 17:41 '17 о 17:41 2017-09-06 17:41

Якщо гілка знаходиться на чимось, крім віддаленого origin , мені подобається робити наступне:

 $ git fetch $ git checkout -b second/next upstream/next 

Це перевірить гілку next на віддаленому сервері upstream в локальному гілки з ім'ям second/next . Це означає, що якщо у вас вже є локальна гілка з ім'ям next, вона не буде конфліктувати.

 $ git branch -a * second/next remotes/origin/next remotes/upstream/next 
22
01 марта '13 в 13:00 2013-03-01 13:00 відповідь дан Kris 01 березня '13 о 13:00 2013-03-01 13:00

git fetch git checkout your-branch-name

15
26 марта '14 в 10:00 2014-03-26 10:00 відповідь дан Inder Kumar Rathore 26 березня '14 о 10:00 2014-03-26 10:00

git branch -r каже, що ім'я об'єкта неприпустимо, тому що ім'я цієї гілки не перебуває у списку локальних гілок Git. Оновлення свій локальний список гілок з джерела за допомогою:

 git remote update 

І потім спробуйте знову перевірити віддалену гілку.

Це спрацювало для мене.

Я вважаю, що git fetch тягне у всіх віддалених гілках, чого не хоче оригінальний плакат.

15
06 июня '13 в 15:21 2013-06-06 15:21 відповідь дан webdevguy 06 червня '13 о 15:21 2013-06-06 15:21

жоден з цих відповідей не працював для мене. це спрацювало:

git checkout -b feature/branch remotes/origin/feature/branch

14
10 июля '18 в 5:11 2018-07-10 05:11 відповідь дан brianyang 10 липня '18 в 5:11 2018-07-10 5:11

Команда git remote show <origin name> буде відображати список всіх гілок (не тільки і не відслідковують гілки). Потім ви можете знайти ім'я віддаленої гілки, яке потрібно витягти.

приклад:

 $ git remote show origin 

Використовуйте ці кроки для вилучення видалених гілок:

 git fetch <origin name> <remote branch name>:<local branch name> git checkout <local branch name > (local branch name should the name that you given fetching) 

приклад:

 $ git fetch origin test:test $ git checkout test 
11
07 янв. відповідь дан Thushan 07 Січня. 2018-01-07 16:12 '18 о 16:12 2018-01-07 16:12

Інші хлопці і дівчата дають рішення, але, може бути, я можу сказати вам, чому.

git перевірки тест, який нічого не робить

Does nothing НЕ дорівнює doesn't work , тому, гадаю, коли ви вводите 'git checkout test' в своєму терміналі та натиснути клавішу введення, повідомлення не виникає і помилки не виникає. Я правий?

Якщо відповідь "так", я можу сказати вам причину.

Причина в тому, що в вашому дереві є файл (або папка) з ім'ям "test".

Коли git checkout xxx розібрався,

  • git спочатку дивиться на xxx як ім'я гілки, але немає гілки з ім'ям test.
  • Тоді Git думає, що xxx - це шлях, і на щастя (чи, на жаль), є файл з ім'ям test. Тому git checkout xxx означає скасувати будь-яку модифікацію в файлі xxx .
  • Якщо немає файлу з ім'ям xxx , то Git спробує створити xxx відповідно до деякими правилами. Одним з правил є створення гілки з ім'ям xxx , якщо існує remotes/origin/xxx .
8
10 июля '17 в 10:45 2017-07-10 10:45 відповідь дан oldman 10 липня '17 о 10:45 2017-07-10 10:45

Я застряг в ситуації, коли сталася error: pathspec 'desired-branch' did not match any file(s) known to git. для всіх пропозицій вище. Я на git версії 1.8.3.1.

Так що це спрацювало для мене:

 git fetch origin desired-branch git checkout -b desired-branch FETCH_HEAD 

Пояснення цьому полягає в тому, що я помітив, що при добуванні віддаленої гілки вона була обрана в FETCH_HEAD:

 $ git fetch origin desired-branch From github.com:MYTEAM/my-repo * branch desired-branch -> FETCH_HEAD 
7
11 окт. відповідь дан alisa 11 Жовтня. 2018-10-11 00:52 '18 в 0:52 2018-10-11 00:52

Просто запустіть git checkout з ім'ям віддаленої гілки. Git автоматично створить локальну гілку, яка відстежує віддалену:

 git fetch git checkout test 

Однак, якщо це ім'я гілки знайдено більш ніж в одному пульті, це не спрацює, тому що Git не знає, що використовувати. В цьому випадку ви можете використовувати або:

 git checkout --track origin/test 

або ж

 git checkout -b test origin/test 

В 2.19 Git вивчив конфігурацію checkout.defaultRemote , в якій при видаленні такої неоднозначності вказується значення віддаленого управління за замовчуванням.

6
13 сент. відповідь дан Eugene Yarmash 13 сент. 2018-09-13 15:21 '18 о 15:21 2018-09-13 15:21

Щоб отримати новостворені гілки

 git fetch 

Переключитися на іншу гілку

 git checkout BranchName 
6
15 марта '18 в 11:49 2018-03-15 11:49 відповідь дан Hasib Kamal 15 березня '18 о 11:49 2018-03-15 11:49

Ви можете почати відстежувати всі видалені гілки з наступним Bash script:

 #!/bin/bash git fetch --all for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'` do git branch -f --track "$branch" "origin/$branch" done 

Ось також однорядкова версія:

 git fetch --all; for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`; do git branch --track "$branch" "origin/$branch" ; done ; 
6
11 авг. відповідь дан OzzyCzech 11 Серпня. 2017-08-11 15:06 '17 о 15:06 2017-08-11 15:06

Будь ласка, дотримуйтесь цій команді, щоб створити порожню папку. Введіть це і використовуйте наступну команду:

 saifurs-Mini:YO-iOS saifurrahman$ git clone your_project_url Cloning into 'iPhoneV1'... remote: Counting objects: 34230, done. remote: Compressing objects: 100% (24028/24028), done. remote: Total 34230 (delta 22212), reused 15340 (delta 9324) Receiving objects: 100% (34230/34230), 202.53 MiB | 294.00 KiB/s, done. Resolving deltas: 100% (22212/22212), done. Checking connectivity... done. saifurs-Mini:YO-iOS saifurrahman$ cd iPhoneV1/ saifurs-Mini:iPhoneV1 saifurrahman$ git checkout 1_4_0_content_discovery Branch 1_4_0_content_discovery set up to track remote branch 1_4_0_content_discovery from origin. Switched to a new branch '1_4_0_content_discovery' 1_4_0_content_discovery from origin saifurs-Mini:YO-iOS saifurrahman$ git clone your_project_url Cloning into 'iPhoneV1'... remote: Counting objects: 34230, done. remote: Compressing objects: 100% (24028/24028), done. remote: Total 34230 (delta 22212), reused 15340 (delta 9324) Receiving objects: 100% (34230/34230), 202.53 MiB | 294.00 KiB/s, done. Resolving deltas: 100% (22212/22212), done. Checking connectivity... done. saifurs-Mini:YO-iOS saifurrahman$ cd iPhoneV1/ saifurs-Mini:iPhoneV1 saifurrahman$ git checkout 1_4_0_content_discovery Branch 1_4_0_content_discovery set up to track remote branch 1_4_0_content_discovery from origin. Switched to a new branch '1_4_0_content_discovery' 
2
01 янв. відповідь дан Mehedi Hasan 01 Січня. 2016-01-01 13:31 '16 о 13:31 2016-01-01 13:31

Отримати походження і перевірити гілку.

 git fetch origin  git checkout branch_name 
1
21 мая '18 в 14:33 2018-05-21 14:33 відповідь дан Pranav 21 травня '18 о 14:33 2018-05-21 14:33

Якщо ім'я віддаленої гілки починається зі спеціальних символів, вам потрібно використовувати одинарні лапки в команді checkout, інакше git не знатиме, про яку гілці ви говорите.

Наприклад, я спробував витягти віддалену гілку з ім'ям #9773 але команда не працювала належним чином, як показано на малюнку нижче:

2019

07 нояб. відповідь дан Ulysses Alves 07 нояб. 2018-11-07 14:17 '18 о 14:17 2018-11-07 14:17

Інші питання по мітках або Задайте питання