Питання Git завантажувати віддалену гілку


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

Однак у мене є філія. Моє питання полягає в тому, як мій колега може спеціально витягнути цю галузь? А. git clone з репо, здається, не створює для нього філій на місцевому рівні, хоча я бачу, щоб вони жили на розв'язці після натискання на моє закінчення.

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

iMac:test_solar dave$ git branch -r
origin/HEAD -> origin/master
origin/daves_branch
origin/discover
origin/master

git fetch origin discover
git checkout discover

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


1602
2018-03-02 17:06


походження


можливий дублікат гітара оформлення віддаленої філії - Andrew Marshall
Я використав: git fetch --all, Тоді, щоб переглянути всі гілки: git branch, Тоді я закуповую гілку: git checkout nameofnewbranch - Jeff Mattson
перевірте своє питання ан https://stackoverflow.com/questions/1072261/push-and-pull-branches-in-git/47780374#47780374 - Rizo


Відповіді:


Вам потрібно створити локальну гілку, яка відстежує віддалену гілку. Наступна команда створить локальну гілку з ім'ям daves_branch, відстеження віддаленої гілки походження / daves_branch. Коли ви натискаєте зміни, віддалене відділення буде оновлено.

Для більшості версій git:

git checkout --track origin/daves_branch

--track це скорочення для git checkout -b [branch] [remotename]/[branch] де [remotename] є походження в цьому випадку і [галузь] двічі однакова, daves_branch в цьому випадку.

Для git 1.5.6.5 потрібно це:

git checkout --track -b daves_branch origin/daves_branch

Для git 1.7.2.3 і вище це достатньо (можливо, почалося раніше, але це найперше підтвердження, яке я міг знайти швидко):

git checkout daves_branch

Зверніть увагу, що за допомогою останніх версій git ця команда не створить локальну гілку і поставить вас у стан "від'єднаних HEAD". Якщо вам потрібна локальна філія, скористайтеся --track варіант Повний опис тут: http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches


2225
2018-03-02 17:45



"git get", щоб переконатися, що ваш репо оновлено з віддаленими посиланнями, і "git checkout --track origin / discover" має бути достатньо. Тоді ви можете покластися на цю гілку та на "git push", щоб синхронізувати пульт з вашими змінами. - ralphtheninja
Я спробував це і отримав "фатальний: git checkout: оновлення шляхів несумісні з перемиканням гілок. Ви мали намір перевірити" upstream / develop ", які не можуть бути вирішені як commit?". Я робити щось не так? - Neil Barnwell
Схоже, git 1.5.6.5 потребує цього: git checkout - track -b origin / daves_branch - Charlie
Це змусило мене створити локальну гілку з походженням / <branch>, яка зараз неоднозначна для віддаленого походження / <branch>, і я не знаю, як позбутися сумасшедшего місцевого відділення! - Alan Moore
Вам потрібно явним чином додати назву місцевої гілки, в іншому випадку git створює нову локальну гілку з повним каналом гілки, як зазначено вище: @AlanMoore і @ derekmx271: git checkout -b --track daves_branch origin/daves_branch - Mike Scott


Я використовував fetch слідує checkout ...

git fetch <remote> <rbranch>:<lbranch> 
git checkout <lbranch>

... де <rbranch> це віддалена філія або джерело ref і <lbranch> є як ще не існує місцеве відділення чи адреса призначення ви хочете відстежувати і які ви, мабуть, хочете назвати так само, як віддалене відгалуження або джерело ref. Це пояснюється під варіанти в поясненнях <refspec>.

Гіт настільки розумний, що автоматично завершує першу команду, якщо я вкладка після перших літер віддаленого відділення. IE: Мені навіть не слід назвати місцеву гілку, Gіt автоматично копіює назву віддаленого відділення для мене. Дякую!

Також як відповідь у цьому аналогічному положенні показує, якщо ви не називаєте місцеву гілку в fetch, ви все одно можете створити його, коли перевірите його, скориставшись -b прапор IE:  git fetch <remote> <branch> слідує git checkout -b <branch> <remote>/<branch> робить точно так само, як і моя перша відповідь. І, очевидно, якщо у вас є репо тільки один віддалений, то ви можете просто зробити git checkout <branch> після fetch і це створить для вас місцеву гілку. EG: Ви просто клонули репо та хочете переглянути додаткові гілки з пульта дистанційного керування.

Я вважаю, що деякі документи для fetch може бути скопійовано дослівно від pull. Зокрема розділ о <refspec> в варіанти те ж саме. Однак я не вірю в це fetch буде коли-небудь merge, так що якщо ви залиште цільову сторону товстої кишки порожніми fetch  нічого не робити.

ПРИМІТКА. Це git fetch <remote> <refspec> короткий для git fetch <remote> <refspec>: що нічого не зробить, але git fetch <remote> <tag> такий же, як і git fetch <remote> <tag>:<tag> який повинен копіювати пульт дистанційного керування <tag> локально

Я думаю, це дуже корисно, якщо ви хочете копіювати віддалене підключення локально, але не обов'язково перевіряйте його негайно. Інакше я зараз буду використовувати прийнята відповідь вище, що докладно пояснюється в першому розділі опис оформлення замовлення і пізніше в варіанти розділ під поясненням --track, оскільки це 1-лайнери. Добре... начебто 1-вкладиш, тому що ви б досі доводиться бігти git fetch <remote> перший.

FYI: Порядок <refspecs> (джерело: адресат) пояснює дивний метод попереднього Git-1.7 для видалення віддалених філій. IE: не натискайте нічого на цільовий рефсек.


744
2018-04-19 00:45



Ви вважаєте, що автоматичне завершення Git налаштовано. code-worrier.com/blog/autocomplete-git - antonagestam
Це працювало для мене, щоб отримати віддалений код у місцеву гілку. Проте це не означає, що моя місцева філія відстежуватиме віддалену гілку. - Aknosis
Це працювало для мене, прийнятої відповіді не було. - Parthian Shot
З якоїсь причини, git fetch remote branch я не додав голову гілки взагалі, хоча і отримав усі прислання, тому, коли я намагався виконати кроки у прийнятій відповіді, я отримав помилку pathspec did not match any file(s) known to git., але rbranch:lbranch підхід працював. Цікаво, що вона також знайшла всі теги, які розпочали з того ж префікса, як це є підстановочним знаком (rbranch*) - haridsv
Nit: git не робить автозаповнення, це оболонка bash, яка це робить. - legalize


Якщо ви намагаєтесь "перевірити" нову віддалену гілку (яка існує лише на пульті дистанційного керування, але не локально), тут вам буде потрібно:

git fetch origin
git checkout --track origin/<remote_branch_name>

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


270
2018-05-17 12:14



"тягнути" з походження - це заплутана мова, краще змінити коментар вище, щоб "витягти" з походження. Потяг - це команда, яка робить вибірку та злиття, і це, безумовно, збиває новичок (я включений) - Davos
Працював для мене! Додаючи це до моїх нотаток зараз :) Спасибі ви! - hmd
Працював для мене, я не знайшов правильну віддалену гілку, так що прийнята відповідь продовжувала провалитися для мене з заплутаним повідомленням. +1 - Nathan Hinchey
Просто і солодко, я впевнений, що більшість користувачів просто хочуть зробити цю операцію на першому місці. - vikramvi
Це те, що я завжди шукав! Дякую @paneer_tikka - Kris Randall


Щоб перевірити myBranch, який існує віддалено, а не локально - це працювало для мене:

git fetch --all
git checkout myBranch

Я отримав це повідомлення:

Branch myBranch set up to track remote branch myBranch from origin
Switched to a new branch 'myBranch'

88
2017-11-12 03:36



Іншими словами, вам не потрібно писати -t? - Andrew Samuelsen
Я думаю, що у цій відповіді є помилка. Я спочатку зробив команду без -t і отримав You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. тому що не було місцевого відгалуження одного й того ж імені. Мені довелося знову забігати -t виправити. - stanri
Це добре для мене - моя колега додав нову віддалену гілку, яку я хотів би додати до моєї місцевої репо. Я продовжував отримувати, але не бачив нову галузь, яка з'являється на місці. Не зрозумів, що я міг просто бігти checkoutдля того, щоб створити його. Дякую! - skwidbreth
залежить від версій Git. Остання версія, як сказано в іншому місці, потрібна лише для перевірки git <назва філії по походженню>. БУДЬТЕ БЕЗПЕЧНО З ПРАВИЛАМИ ЛІКАЛІЗАЦІЇ ВІД РЕМОНТНИХ ФІЛІЗІВ - вони будуть збивати здивування - leRobot


Використовуйте git branch -a (як місцеві, так і віддалені відділення) або git branch -r (лише віддалені відгалуження), щоб побачити всі пульти та їхні гілки. Ви можете зробити це git checkout -t remotes/repo/branch на пульт і створити місцеву гілку.

Існує також команда git ls-remote, щоб побачити всі посилання та мітки для цього пульта дистанційного керування.


37
2018-03-02 17:16



git checkout remotes/repo/branch робить перевірку git шукати шлях, а не віддалений репо. - Erin
Так, чи можна навіть замовити гілку на віддаленому репо? Очевидно (або, може бути, це було не так очевидно), першоджеребці спочатку отримували, так що ви їх локально. У книжці "Діти" є хороший розділ про них: git-scm.com/book/en/Git-Branching-Remote-Branches - Daniel Lee


Назва та питання плутаються:

  • Git завантажувати віддалену гілку
  • як мій колега може витягнути цю галузь спеціально.

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

За допомогою git (> = 1.6.6) ви можете використовувати:

git checkout <branch_name>

Якщо місцевий <branch_name> не знайдено, але існує відгалуження відгалуження в точно одному дистанційному пристрої з відповідним ім'ям, розглядаються як еквівалентні:

git checkout -b <branch_name> --track <remote>/<branch_name>

дивіться документацію для оформлення копій git

Для вашого друга:

$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'

33
2018-03-31 10:48



Спасибі Гійом! Я просто скористався цією командою і написав про це повідомлення, щоб зобразити мою конкретну справу: leniel.net/2014/05/... - Leniel Maccaferri
<! - git checkout <remote-branch-name> -> працює як очікується, спасибі Guillaume! - Sachidananda Naik


git checkout -b serverfix origin/serverfix

Це досить поширена операція, яка надає git стенограму --track:

git checkout --track origin/serverfix

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

git checkout serverfix

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

git checkout -b sf origin/serverfix

Тепер ваша локальна галузь SF буде автоматично перетягувати з origin / serverfix.

Джерело: Pro Git 2nd Edition, написана Скоттом Чаконом і Беном Страубом(скорочення для читабельності)


24
2018-03-18 00:21



Працює! Дякую! - Karl Pokus