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


6711

Хто - то штовхнув гілку під назвою testз git push origin testв загальне сховище. Я бачу гілку с git branch -r.

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

Я спробував:

  • git checkout test що нічого не робить

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

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


9
@inger Але це не включає можливість перейменувати нову локальну гілку (якщо ви хочете - встановити вгору
потоки

15
Я вважаю, що ця нитка не є корисною. Начебто нічого не працює, оригінальне запитання, здається, втрачено у багатьох відповідях. Я прочитав кожне слово, спробував усе нижче, і не маю уявлення, як робити те, що хоче зробити ОП.
Тоні Енніс

6
Команди Git - це не інтуїтивно, для початку додайте зміни, внесені до останніх версій у суміш, і у вас є ця сторінка ...
Крістоф Руссі

14
Мені здається, я приймаю шалені таблетки. Я намагаюся перевірити гілку з upstream, а не просто origin, і кожна рекомендована відповідь не робить нічого корисного з дистанції (призначене для каламбура). EDIT - вибачте, безліч пропозицій, що містяться у двох найкращих відповідях, були марними; 3-й ( git branch test origin/test) - це те, що працює. Радий, що перші 2 мають 20
разів

4
Можливо, у вашому робочому дереві є файл з назвою "test", детально див. Stackoverflow.com/a/45006389/792416 .
старець

Відповіді:


9150

Оновлення

Відповідь Якуба з цього приводу насправді покращується. З версіями 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

398
Для розширення цього питання: git не дозволяє працювати на чужих гілках. Ви можете працювати лише самостійно. Отже, якщо ви хочете додати до чужої гілки, вам потрібно створити власну "копію" цієї гілки, що і робить вищевказана команда (ну, вона створює вашу гілку і перевіряє її також).
Dan Molding

139
Якщо це нова віддалена гілка, вам, можливо, знадобиться, git fetchперш ніж робити це, щоб git знав про цеorigin/test
Neil Sarkar

56
... і ти зробив би це зgit fetch origin test
Андрієм

22
Помилка: "git checkout: оновлення контурів несумісне з комутацією гілок. Чи ви мали намір здійснити перевірку, origin/testяку не можна вирішити як фіксацію?"
Xeoncross

85
git checkout testНЕ працюватиме в сучасному git, якщо у вас є кілька віддалених пристроїв, які мають однакову назву гілки . Він не може знати, який з них використовувати.
masukomi

1256

Сторінка: З сучасним Git (> = 1.6.6 ) ви можете користуватися просто

git checkout test

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


* (no branch)У git branchвихідних означають , що ви перебуваєте на безіменній галузі, в так званому «стоїть окремо HEAD» стані (точки ГОЛОВИ безпосередньо здійснювати, а не символічна посилання на який - то місцева філія). Якщо ви зробили деякі зобов’язання на цій безіменній гілці, ви завжди можете створити локальну гілку поза поточною комісією:

git checkout -b test HEAD

** EDIT (від редактора, не автор) **

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

@Dennis: git checkout, наприклад походження git checkout / результати тестування в окремій HEAD / безіменній гілці, в той час як git checkout test або git checkout -b тест походження / результати тесту в місцевому тесті філії (з віддаленим відстеженням походження / тесту гілки як вище ) - Якуб Нарбський 9 січня 14 о 14:17

акцент на git checkout origin/test


33
Не дивно, але ця версія була випущена за останні кілька років - знаючи цей синтаксис може заощадити багато часу, оскільки все ще існує багато старої документації та теми коментарів, що плавають навколо, що пропонує старий метод зробити це.
Кертіс

10
"modern git" - для запису (приблизно) про яку версію ви посилаєтесь? Іноді доводиться працювати над системами, що працюють зі старшими дистрибутивами.
Крейг МакКуїн

5
"Сучасний git" в цьому контексті - git 1.6.6
Боббі Нортон

10
@aidan Якщо ви отримаєте подібну відповідь, error: pathspec 'branch_name' did not match any file(s) known to git.то спочатку слід зробити git fetch.
Денніс

6
Використання git версії 1.8.3.msysgit.0, і це не працює для мене - не відповідає жодному файлу, який відомо git - я зробив багато
випробувань

564

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

$ git branch test origin/test

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


15
Це створить локальну гілку, не перемикаючись на неї.
Олексій Скрипник

2
Хоча мені стало фатально: Неоднозначна назва об'єкта: 'origin / dev' - там, де гілка 'dev' за походженням, безумовно, існує - але я випадково створив гілку під назвою "origin / dev" на своїй машині (у попередніх дурних спробах щоб отримати це право, без сумніву) ... ой
PandaWood

1
Це дало мені помилку про помилку: не вдалося натиснути деякі відповіді, щоб натякнути: Оновлення відхилено, оскільки висунутий наконечник гілки стоїть за віддаленою підказкою: колега. Ознайомтеся з цією гілкою та об'єднайте підказку про віддалені зміни: (наприклад, "git pull"), перш ніж натиснути знову. підказка. Докладні відомості див. у розділі "Примітка про швидку перемотку" в "git push --help".
pal4life

475

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

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

$ git checkout -b remote_branch origin/remote_branch

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

Рішення

Якщо ви отримаєте це повідомлення, спочатку потрібно виконати, 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'

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


2
Я додаю примітку, якщо у вас є окрема гілка локально: Переконайтесь, що ви пов’язали це з віддаленим репо, використовуючи 'git remote add origin [the_path_to_your_repo / repo_name.git]'. Потім використовуйте "git fetch origin", де "origin" означає сховище походження, з яким ви зв'язали зв'язок.
elliotrock

git checkout -b newbranchтакож чудово підходить для однокрокового створення та оформлення нового відділення на основі поточної гілки.
Лінус

2
Я думаю, що це найсучасніший (він продовжує змінюватись $ @ #! Ing!). Git 2.5.5 Я знайшов єдиний спосіб насправді побачити віддалені гілки, git ls-remoteі єдиний спосіб фактично використовувати його - це git checkout -b [branch] --track [remote/branch]... і це вже після git pull [remote] [branch] роботи. Тобто, це фактично витягнуло всю гілку, але все ще не перелічувало б її.
делікатна

і коли ця відповідь не працює, дивіться цю .
ейс

просто додати, якщо git fetch other_remote only_branchви все одно отримаєте fatalпомилку. Ви повинні git fetch other_remoteбез назви філії. Дивний дизайн.
est

258

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

git fetch origin 'remote_branch':'local_branch_name'

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


37
Це працювало для мене, коли ні git fetch origin, ні git віддалене оновлення не створювали локальні гілки. Я не впевнений, чому.
Godsmith

4
Це був найбільш прямий спосіб здійснити те, що мені було потрібно, - це використовувати віддалену гілку (не майстер) для створення нової гілки.
Roralee

7
Працював бездоганно, особливо, коли клонував одну віддалену гілку з віддаленою безліччю гілок.
Алекс C

7
це працювало і для мене, де прийнятих відповідей та інших високих голосів не було. Моя версія git - 2.5.0
pdepmcp

5
Хтось має уявлення, чому це працює, коли все інше не відбувається? (Я на git 2.13.0)
Натан Артур

108

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

$ git checkout -t remote_name/remote_branch

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

$ git remote add remote_name location_of_remote
$ git fetch remote_name

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


104

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

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

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


2
Чи усвідомлюєте ви, що це витяг із цієї відповіді
Томас Аюб,

14
Дивлячись на це зараз, вони перетинаються. Тільки моя є лаконічною і говорить тобі, що робити, а не розповідати історію. Я припускаю, що може бути кориснішим, особливо для сучасних версій git. Ви можете зняти його, якщо вважаєте, що це погана відповідь.
matanster

1
git fetch - безпечний варіант. Спробуйте отримати, перш ніж використовувати тяг. Обидва завантажують віддалений вміст, але поки видобуток не змінить локальний стан, функція pull негайно змінить локальний стан.
Пітер Салай

89

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

Вам потрібно до fetchвідділення ...

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

git fetch && git checkout test

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

git fetch


@DmitriZaitsev так, це спрацює, якщо віддалений відділення є, і ви зробите, ви отримаєте гілку локально ... git fetch && git checkout test. Так це працює, якщо немає віддаленої гілки, але запитання кажучи, що там вже є віддалений відділення ...
Аліреза

Те, як я бачу питання, testсхоже на нову гілку, тому локально воно, ймовірно, не присутнє. Інакше ви могли б легше витягнути його за допомогою однієї git pullкоманди.
Дмитро Зайцев

@DmitriZaitsev, так, саме тому я сказав git fetch, що перевірка на віддалені гілки, які щойно створені, "pull", може принести інші непотрібні матеріали, але ви можете отримати всі гілки доступними, якщо у вас вже є репо на місцевому рівні ...
Alireza

Чи не було б fetchбез pullзмін відпусток в витягнутої копії , але не в місцевому відділенні, що ведуть до місцевого відділення не в останню дату?
Дмитро Зайцев

56

Щоб клонувати сховище 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.

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


git clone <або ssh url / http url> - прекрасно працює для мене
Kmeixner

Так, ви праві. Дякуємо за вашу інформацію, я її дуже скоро оновлю @warvariuc
Madhan Ayyasamy

Якщо пульта немає master, це не працює.
polkovnikov.ph

36

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

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

або

git fetch
git checkout -b local_branch_name origin/branch_name

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

33

Спочатку вам потрібно зробити:

git fetch # Якщо ви не знаєте про назву філії

git fetch origin branch_name

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

git checkout -b branch_name origin/branch_name

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


Я не розумію -b. Якщо ви можете зробити "майстра виїзної каси", чому не можете зробити "походження / тест git checkout"?
Джон Малий

-b для нової гілки, яка походить з походження / майстра
Mohideen bin Mohammed

28

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

git checkout --track origin/other_remote_branch

13
Ця відповідь була б набагато кориснішою, якщо ви поясните, чому ви її використовуєте таким чином. тобто чому хтось повинен використовувати "- трек" і так далі ...
Метт Фрідман

27

Команди

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


24

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

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

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

$ git branch -a
* second/next
  remotes/origin/next
  remotes/upstream/next


18

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

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


1
Дякую. Мені було цікаво, чи потрібно мені використовувати повний шлях ( видалення / походження / особливість / гілку ), який я бачив під gitчас виклику git branch -aкоманди, але я не був впевнений, тому я просто використовував git checkout -b apps/FEATURE/branch origin/apps/FEATURE/branchі, здавалося, працює. Повідомлення:Branch 'apps/FEATURE/branch' set up to track remote branch 'apps/FEATURE/epicBranch' from 'origin'. Switched to a new branch 'apps/FEATURE/branch'
Chris22,

18

Я застряг у ситуації, бачачи 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

17

Просто запустіть 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конфігурацію, яка вказує віддалене значення за замовчуванням при вирішенні такої неоднозначності.


16

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

git remote update

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

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

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


2
FYI, git remote update також отримає всі віддалені гілки .

13

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

@hallski відповів, що не працює версії 2.15.1, але у мене є скорочення. Наприклад, $ git clone -b release --single-branch --depth 5 https://github.com/user/repo.gitінформація про $ git remote show originне вказана, це не перелічено всіх віддалених відділень з клонованими сховищами з однією гілкою.
Qh0stM4N

10

Витягніть з пульта та оформить замовлення у відділенні.

git fetch <remote_name> && git checkout <branch_name> 

Наприклад:

git fetch origin && функція замовлення git / XYZ-1234-Add-alerts


9

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

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

Does nothingне дорівнює doesn't work, тому я думаю, що коли ви вводите "git checkout test" у свій термінал і натискаєте клавішу Enter, повідомлення не з’являється і помилка не виникає. Чи правий я?

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

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

При git checkout xxxрозборі

  1. xxxСпочатку Git виглядає як назва гілки, але не існує жодної гілки з тестом.
  2. Тоді Git думає xxx, що це шлях, і на щастя (або на жаль), існує файл з назвою тест. Значить, git checkout xxxвідкиньте будь-які зміни у xxxфайлі.
  3. Якщо також немає файлу з іменем xxx, Git спробує створити xxxзгідно з деякими правилами. Одне з правил - створити гілку, названу, xxxякщо вона remotes/origin/xxxіснує.

дякую, продовжував намагатися з’ясувати, чому git нічого не робив.
Майк R

8

Щоб отримати новостворені відділення

git fetch

Щоб перейти в іншу гілку

git checkout BranchName

6

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

#!/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 ;

5

git checkout -b "Ім'я гілки" [B означає Створити локальну гілку]

git гілка - всі

git checkout -b "Назва вашого відділення"

git гілка

успішно оформляє замовлення від ведучого відділення до відділення Dev

введіть тут опис зображення


git checkout -b "Назва гілки" [B означає Створити локальну гілку]
Кешав Гера

3

щоб отримати всі віддалені відділення, скористайтеся цим:

git fetch --all

потім виїзд у відділення:

git checkout test

2

Використовуйте, fetchщоб витягнути весь пульт

   git fetch --all

Щоб перерахувати віддалені відділення:

   git branch -r

Список усіх ваших відділень

   git branch -l
   >>outpots like-
     * develop
       test
       master

Оформити замовлення / змінити відділення

   git checkout master

Спробували, git branch -lа віддаленої гілки не було показано.
Дмитро Зайцев

використання git pull --allабоgit fetch --all
Насір Хан

Та й після цього git branch -l все ще показує лише місцеві відділення. Здається, працює саме так, як і git branchбез -l, тож у чому причина -l?
Дмитро Зайцев

Також ваша відповідь не відповідає на питання - masterце не віддалена гілка.
Дмитро Зайцев

-lпрапор для списку. Ви можете використовувати --listтеж
Насир Хан

2

Для нас, здається, remote.origin.fetchконфігурація створила проблему. Тому ми не могли побачити жодних інших віддалених гілок, ніж master, тому git fetch [--all]не допомогли. Ні, git checkout mybranchні git checkout -b mybranch --track origin/mybranchпрацювали, хоча це, безумовно, було віддалено.

Попередню конфігурацію masterможна було отримати лише:

$ git config --list | grep fetch
remote.origin.fetch=+refs/heads/master:refs/remotes/origin/master

Виправте її, використовуючи *та отримуючи нову інформацію від походження:

$ git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'

$ git fetch
...
 * [new branch] ...
...

Тепер ми могли git checkoutвіддалено відгалужуватися локально.

Не знаю, як ця конфігурація опинилася в нашому місцевому репо.


1
Це вирішило це для мене, оскільки я клонував єдину гілку
Понт Холмбом

2

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

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

введіть тут опис зображення

Чомусь я задумався, чи може різкий символ (#) мати щось спільне з цим, і тоді я спробував оточити назву гілки одинарними лапками, як '#9773'Rathen ніж просто #9773, і, на щастя, це спрацювало чудово.

$ git checkout -b '#9773' origin/'#9773'

У багатьох оболонках Unix #персонаж використовується для коментарів, тому все після #заповіту буде проігноровано. Це оболонка, а не щось специфічне для git. Використання лапок зворотної косої риски до цього #має бути достатньо.
Пауло Скардін

1

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

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'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.