Git извлича отдалечен клон

Моят колега и аз работим по едно и също хранилище, което ние технически разклонихме на два клона, всеки от които е предназначен за различни проекти, но те имат сходства, така че понякога искаме да ги изпратим обратно на master * от branch .

Но имам branch . Имам въпрос, как моят колега може да използва тази тема?

git clone репото на git clone не създава клони за него на местно ниво, въпреки че виждам, че те живеят в неприлично състояние след натискане от моя страна.

Също така, когато първоначално направих клон, направих -b checkout . Не сте сигурни дали има значение?

 $ git branch -r origin/HEAD -> origin/master origin/daves_branch origin/discover origin/master $ git fetch origin discover $ git checkout discover 

Това са командите, които изпълнявам. Но определено не работи.

Искам да мога да проверя тази тема и след това да изпращам и записвам само промени в бранша от различни сътрудници или работни станции .

1757
02 марта '12 в 20:06 2012-03-02 20:06 Дейвид е на 02 март 2012 г. в 20:06 ч. 2012-03-02 20:06
@ 26 отговора

Трябва да създадете локален клон, който проследява отдалечения клон. Следната команда ще създаде локален клон с име daves_branch , проследяващ произхода на отдалечения клон / daves_branch . Когато кликнете върху промените, отдалеченият клон ще бъде актуализиран.

За най-новите версии на git:

 git checkout --track origin/daves_branch 

--track е съкращение за git checkout -b [branch] [remotename]/[branch] където [remotename] е източникът в този случай, и [branch] е два пъти по-голям, в този случай 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

2428
02 марта '12 в 20:45 2012-03-02 20:45 отговорът е даден ralphtheninja 02 март '12 в 20:45 2012-03-02 20:45

Използвах fetch последвано от checkout ...

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

... където <rbranch> е отдалеченият клон или референтен източник ref, и <lbranch> е все още несъществуващ локален клон или получател, който искате да проследявате и който вероятно искате да наименувате същото като отдалечения клон или източник ref , Това е обяснено в опции в обяснението на <refspec> .

Git е толкова умен, че автоматично завършва първата команда, ако пиша след първите няколко букви на отдалечения клон. IE: Аз дори не трябва да посочвам локален клон, Git автоматично копира името на отдалечения клон за мен. Благодаря Git!

Също така, като отговор в това подобно съобщение, SO показва, че ако не назовете локалния клон в fetch , все още можете да го създадете, когато проверите с флага -b . IE: git fetch <remote> <branch> и след това git checkout -b <branch> <remote>/<branch> прави същото нещо като оригиналния ми отговор. И, очевидно, ако вашият репо има само едно дистанционно управление, тогава можете просто да направите git checkout <branch> след fetch , и той ще създаде локален клон за вас. EG: Просто клонирахте репо и искате да проверите допълнителни клонове от конзолата.

border=0

Вярвам, че някои от документацията за fetch могат да бъдат копирани дословно от pull . По-специално, <refspec> в опциите е един и същ. Не мисля обаче, че fetch никога няма да бъде merge , така че ако оставите страната на адресата на двоеточие празно, fetch трябва да прави нищо .

ЗАБЕЛЕЖКА. git fetch <remote> <refspec> тази git fetch <remote> <refspec> не е подходяща за git fetch <remote> <refspec>: няма да направи нищо, но git fetch <remote> <tag> същата като git fetch <remote> <tag>:<tag> , който трябва да копира дистанционното <tag> локално.

Мисля, че това е полезно, ако искате да копирате отдалечен клон локално, но не непременно да го проверите незабавно. В противен случай сега използвам приетия отговор по-горе , който е обяснен подробно в първия раздел на дизайна , а след това в секцията с опции под обяснението на --track , тъй като това е 1- --track . Ами ... като един лайнер, защото все още трябва първо да стартирате git fetch <remote> .

FYI: order <refspecs> (източник: дестинация) обяснява въображаемия преди Git -1.7 метод за премахване на изтритите клонове , IE: не кликвайте на дестинацията refspec.

792
19 апр. Отговор, даден от Mark Mikofski 19.04 2013-04-19 03:45 '13 в 3:45 2013-04-19 03:45

Ако се опитвате да "проверите" нов отдалечен клон (който съществува само на отдалеченото, но не локалното), това е, което ви е необходимо:

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

Предполага се, че искате да извлечете от източника. Ако не, заменете източника с вашето отдалечено име.

292
17 мая '13 в 15:14 2013-05-17 15:14 отговорът е даден на paneer_tikka Май 17 '13 в 15:14 2013-05-17 15:14

За да тествате myBranch, която съществува отдалечено, а не локално - тя работи за мен:

 git fetch --all git checkout myBranch 

Получих това съобщение:

 Branch myBranch set up to track remote branch myBranch from origin Switched to a new branch 'myBranch' 
93
12 нояб. Отговорът е даден от Дейвид на 12 ноември. 2013-11-12 06:36 '13 в 6:36 2013-11-12 06:36

Използвайте git branch -a (както локални, така и отдалечени клонове) или git branch -r (само отдалечени клонове), за да видите всички конзоли и техните клонове. След това можете да направите git checkout -t remotes/repo/branch на отдалечен компютър и да създадете локален клон.

Съществува и команда git ls-remote, за да видите всички връзки и маркери за това отдалечено.

41
02 марта '12 в 20:16 2012-03-02 20:16 отговорът е даден Daniel Lee 02 март '12 в 20:16 2012-03-02 20:16

Името и въпросът са объркани:

  • Git извлича отдалечен клон
  • Как моят колега може да отклони този клон.

Ако въпросът е как да задействам отдалечен клон или как да проверя отдалечен клон, по-простото решение е:

С git (> = 1.6.6) можете да използвате:

 git checkout <branch_name> 

Ако локалното <branch_name> не бъде намерено, но има клон за проследяване в точно едно отдалечено място с съвпадащо име, помислете за еквивалентно:

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

вижте документацията за git checkout

За вашия приятел:

 $ git checkout discover Branch discover set up to track remote branch discover Switched to a new branch 'discover' 
34
31 марта '14 в 13:48 2014-03-31 13:48 отговорът е даден от Guillaume Vincent 31 март 2009 г. в 13:48 2014-03-31 13:48
 git checkout -b serverfix origin/serverfix 

Това е доста често срещана операция, при която git осигурява съкратения израз: -track:

 git checkout --track origin/serverfix 

Всъщност, това е толкова често, че дори има етикет за този етикет. Ако името на клона, който се опитвате да проверите (а), не съществува и (б) точно съвпада с името само на един отдалечен сървър, git ще създаде проследяващ клон за вас:

 git checkout serverfix 

За да настроите локален клон с различно име от отдалечения клон, можете лесно да използвате първата версия с различно име на локалния клон:

 git checkout -b sf origin/serverfix 

Сега вашият локален клон на sf автоматично ще извади изходния код / ​​serverfix.

Източник: Pro git 2-ро издание, написано от Скот Чакон и Бен Страуб (четене на процеп)

25
18 марта '16 в 3:21 2016-03-18 03:21 отговорът е даден от ManuelSchneid3r 18 март '16 в 3:21 2016-03-18 03:21

Използвайки тази проста команда:

 git checkout -b 'your_branch' origin/'remote branch' 
19
18 мая '17 в 12:38 2017-05-18 12:38 отговорът е даден от Karthik damodara на 18 май'17 в 12:38 2017-05-18 12:38
 git fetch git branch -r git checkout <branch_name> 
13
04 дек. Отговор, даден от John Rodriguez Dec 04 2013-12-04 23:53 '13 в 23:53 2013-12-04 23:53

Можете да получите и проверите отдалечения клон с един изстрел: -

 git fetch  git checkout the-branch-name 
12
25 марта '15 в 9:43 2015-03-25 09:43 отговорът е даден от Кумар Самбхав на 25 март'15 в 9:43 2015-03-25 09:43

Най-лесният начин да направите това, поне за мен:

 git fetch origin <branchName> 
12
06 окт. отговор, даден от James Rochabrun 06 октомври 2017-10-06 12:26 '17 в 12:26 часа 2017-10-06 12:26

Написах

 git checkout <branch_name> 

и имам

 Branch <branch_name> set up to track remote branch <branch_name> from origin. Switched to a new branch '<branch_name>' 
10
17 окт. отговорът е даден Гийом Гийом 17 октомври. 2013-10-17 03:07 '13 в 3:07 2013-10-17 03:07

От време на време се изисква да не се притесняваш с водещия клон и да работиш само с отдалечения клон (както бях помолен). Така че всичко, от което се нуждаете, е отдалечен клон.

Така че, за да клонирате отдалечен клон отделно (без капитан), направете го

 git clone url --branch remote_branch_name 

където, remote_branch_name е името на отдалечения клон

Например

 git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git --branch v3.15 

Това ще ви позволи да клонирате отдалечен клон в локален клон с името на отдалечения клон.

Сега, ако преминете кода и кликнете, кодът ще бъде изпратен само на тази тема.

9
06 февр. отговорът е даден от ganezdragon 06 Feb. 2015-02-06 08:11 '15 в 8:11 AM 2015-02-06 08:11

git fetch --all git checkout <branch name>

7
20 нояб. отговор, даден от Jerome Anthony 20 ноември 2017-11-20 03:42 '17 в 3:42 2017-11-20 03:42

Това, което ми помогна, беше

1) За да видите всички налични отдалечени клонове (например, "име-отдалечен клон")

 git branch -r 

2) Създайте локален клон, като използвате името на отдалечения клон.

 git fetch  git checkout 'remote-branch-name' 
6
17 сент. отговорът е даден от Arlan T 17 sep . 2018-09-17 05:16 '18 в 5:16 2018-09-17 05:16

git fetch git checkout <your friend branch name> трябва да помогне

4
25 апр. отговорът е даден тамбако 25 април 2018-04-25 14:37 '18 в 2:37 ч. 2018-04-25 14:37

Да предположим, че вашата конзола е git@xyz.git и се нуждаете от неговия клон random_branch. Процесът трябва да бъде както следва:

  1. Първо проверете списъка с дистанционните

    git remote -v

  2. Ако в изхода на командата по-горе няма изтрит git@xyz.git, ще го добавите

    git remote add xyz git@xyz.git

  3. Сега можете да получите съдържанието на това дистанционно

    git fetch xyz

  4. Сега проверете клона на това дистанционно

    git checkout -b my_copy_random_branch xyz/random_branch

  5. Проверете списъка на клоновете от

    git branch -a

Локалният клон на my_copy_random_branch ще проследява клона на вашата конзола.

4
06 марта '18 в 19:59 2018-03-06 19:59 Отговорът е даден заfar142003 март 06 '18 в 19:59 2018-03-06 19:59

Ако вече познавате отдалечения си клон, например ...

 git remote => One => Two 

и знаете името на клона, който искате да проверите ex. br1.2.3.4 , след това направете

 git fetch One => returns all meta data of remote ie the branch name in question. 

остава само да проверим клона

 git checkout br.1.2.3.4 

След това отворете всички нови клонове.

3
26 июня '15 в 20:51 2015-06-26 20:51 отговорът е даден от SoEzPz на 26 юни '15 в 20:51 2015-06-26 20:51

просто опитайте

$ git издърпване произход your_branch_name

3
12 дек. отговор, даден Rizo 12 декември. 2017-12-12 22:47 '17 в 22:47 часа 2017-12-12 22:47

Стъпките са както следва:

  • git fetch origin или git fetch --all , това ще изтрие всички изтрити клонове в локалния ви и след това втората опция, с която можете да се справите.

  • git checkout --track origin/<The_remote_branch you want to switch over>

След това работете върху тази тема и можете да проверите дали сте в тази нишка или не чрез въвеждане

 git branch 

Показва клона, в който се намирате.

3
26 дек. отговорът е даден на Сам на 26 декември. 2013-12-26 13:09 '13 в 13:09 2013-12-26 13:09

Ако имате клонирано хранилище с --depth 1, тогава много от изброените команди няма да работят. Например, погледнете тук

 % git clone --depth 1 https://github.com/repo/code Cloning into 'code'... cd code remote: Counting objects: 1778, done. remote: Compressing objects: 100% (1105/1105), done. remote: Total 1778 (delta 87), reused 1390 (delta 58), pack-reused 0 Receiving objects: 100% (1778/1778), 5.54 MiB | 4.33 MiB/s, done. Resolving deltas: 100% (87/87), done. Checking connectivity... done. Checking out files: 100% (1215/1215), done. % cd code % git checkout other_branch error: pathspec 'other_branch' did not match any file(s) known to git. % git fetch origin other_branch remote: Counting objects: 47289, done. remote: Compressing objects: 100% (15906/15906), done. remote: Total 47289 (delta 30151), reused 46699 (delta 29570), pack-reused 0 Receiving objects: 100% (47289/47289), 31.03 MiB | 5.70 MiB/s, done. Resolving deltas: 100% (30151/30151), completed with 362 local objects. From https://github.com/repo/code * branch other_branch-> FETCH_HEAD % git checkout other_branch error: pathspec 'other_branch' did not match any file(s) known to git. % 

В този случай бих отменил репо, но може би има и други методи, например git shallow clone (clone --depth) прескача отдалечени клонове

2
25 янв. отговорът е даден от Колин Д 25 януари 2018-01-25 00:21 '18 в 0:21 201-01-25 00:21

Проверете .git/config , по-специално какво проследяване има в извличането на тази конзола.

 [remote "randomRemote"] url = git@github.com:someUser/someRepo.git fetch = +refs/heads/*:refs/remotes/randomRemote/* 

Ако има heads/* сочат към randomRemote/* , когато стартирате git fetch randomRemote той ще извлече всички клонове. Тогава можете просто да проверите тази тема.

В противен случай,

  • Трябва да добавите изтрити клонове към проследяването. След това стартирайте .git/config . Ще разберете. git отдалечен клон набор --добави случайноДистанционно случайноотделяне

  • Стартирайте git fetch randomRemote . Това ще доведе до отдалечен клон.

  • Сега можете да стартирате git checkout randomBranch

2
01 февр. Отговорът е даден от Vamshi Suram 01 Feb. 2017-02-01 17:29 '17 в 17:29 2017-02-01 17:29

git branch <name> --track origin/<name>

1
11 марта '18 в 21:02 2018-03-11 21:02 Отговор, даден от Chris F Carroll на 11 март в 21:02 ч. 2018-03-11 21:02

Използвате „git pull“, за да държите клоновете си отделни. Ще използвам действителните имена на репо и клонове, за да помогна, тъй като "lbranch" и "rbranch" са трудни за разчитане.

Нека използвайте:

myteam.unfuddle.com = отдалечен сървър git tlc = unuddle сметка на проекта, където съществува repo daves_branch = име на отдалечено клон

Вие или всеки колега може да изпълните това, за да извадите само вашия клон, без значение колко клона има:

 git init git pull git@myteam.unfuddle.com: митеам / tlc daves_branch: refs / remotes / origin / daves_branch
1
23 мая '13 в 0:10 2013-05-23 00:10 отговорът е даден от Андрю на 23 май '13 в 0:10 2013-05-23 00:10

Една проста команда - "git checkout remote_branch_name" ще ви помогне да създадете локален клон, който има всички промени в отдалечения клон.

0
19 янв. Отговор, даден от SIjeesh Kattumunda на 19 януари 2018-01-19 15:34 '18 в 15:34 ч. 2018-01-19 15:34
 git checkout -b branch_name git pull remote_name branch_name 
-1
22 янв. отговорът е даден на Леон 22 януари. 2019-01-22 13:43 '19 в 13:43 ч. 2019-01-22 13:43

Други въпроси относно tags или Ask a Question