Мой коллега и я работаем над одним и тем же хранилищем. Мы разделили его на две ветви, каждая технически для разных проектов, но у них есть сходства, поэтому мы иногда захотим вернуться к * master
из branch
.
Тем не менее, у меня есть branch
. Как мой коллега может специально использовать эту ветку?
git clone
Хранилища , кажется, не создавать филиалы на местах для него, хотя я могу видеть , что они живут на unfuddle после толчка на моем конце.
Кроме того, когда я изначально сделал ветку, я сделал -b checkout
. Это имеет большое значение?
$ git branch -r
origin/HEAD -> origin/master
origin/daves_branch
origin/discover
origin/master
$ git fetch origin discover
$ git checkout discover
Это команды, которые я выполнил. Но это определенно не работает.
Я хочу иметь возможность проверить эту ветку, а затем отправить и зафиксировать только изменения веток от различных соавторов или рабочих станций .
git
branch
git-branch
git-fetch
Дэвид
источник
источник
git fetch --all
Затем, чтобы просмотреть все ветви:,git branch
Затем я проверяю филиал:git checkout nameofnewbranch
git fetch origin discover:discover && git checkout discover
Ответы:
Вам нужно создать локальную ветку, которая отслеживает удаленную ветку. Следующая команда создаст локальную ветвь с именем daves_branch , отслеживая происхождение удаленной ветки / daves_branch . Когда вы нажмете свои изменения, удаленная ветвь будет обновлена.
Для самых последних версий Git:
--track
это сокращение от того,git checkout -b [branch] [remotename]/[branch]
где [remotename] является источником в этом случае, а [branch] в два раза больше, в этом случае daves_branch .Для Git 1.5.6.5 вам нужно это:
Для Git 1.7.2.3 и выше этого достаточно (возможно, оно началось раньше, но это самое раннее подтверждение, которое я смог быстро найти):
Обратите внимание, что в последних версиях Git эта команда не создаст локальную ветвь и переведет вас в состояние «отделенный HEAD». Если вы хотите локальное отделение, используйте
--track
опцию.Полная информация здесь: 3.5 Git Branching - Удаленные ветки, отслеживание веток
источник
git checkout -b --track daves_branch origin/daves_branch
Я использовал с
fetch
последующимcheckout
...... где
<rbranch>
- ссылка на удаленную ветку или источник, и<lbranch>
это пока еще не существующая ссылка на локальную ветку или назначение, которую вы хотите отслеживать и которую вы, вероятно, хотите назвать такой же, как и ссылка на удаленную ветку или источник. Это объясняется в опциях в объяснении<refspec>
.Git настолько умен, что автоматически завершает первую команду, если я вкладываю после первых нескольких букв удаленной ветви. То есть мне даже не нужно называть локальную ветку, Git автоматически копирует для меня имя удаленной ветви. Спасибо Git!
Кроме того, как показано в ответе в этом аналогичном сообщении о переполнении стека , если вы не называете локальную ветвь
fetch
, вы все равно можете создать ее, извлекая ее с помощью-b
флага. То естьgit fetch <remote> <branch>
следуетgit checkout -b <branch> <remote>/<branch>
точно так же, как и мой первоначальный ответ. И, очевидно, если в вашем репозитории есть только один пульт, вы можете просто сделать этоgit checkout <branch>
после,fetch
и он создаст для вас локальную ветку. Например, вы просто клонировали репозиторий и хотите проверить дополнительные ветви с удаленного компьютера.Я считаю, что некоторые документы для,
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
, поскольку это однострочник. Ну ... вроде одной строки, потому что вам все равно придется бежатьgit fetch <remote>
первым.К сведению: порядок
<refspecs>
(источник: место назначения) объясняет причудливый метод pre Git 1.7 для удаления удаленных веток . То есть ничего не вставляйте в пункт назначения refspec.источник
git fetch remote branch
вообще не добавил заголовок ветки, хотя все ссылки были получены, поэтому, когда я попытался выполнить шаги в принятом ответе, я получил ошибкуpathspec did not match any file(s) known to git.
, ноrbranch:lbranch
подход сработал. Интересно, что он также выбрал все теги, которые начинались с того же префикса, как будто это подстановочный знак (rbranch*
).fetch
команду. Если принятый ответ имеет смысл, потому что OP отмечает, что он уже сделал выборку. По крайней мере, это проблема, с которой я столкнулся.Если вы пытаетесь «оформить» новую удаленную ветку (которая существует только на удаленной, но не локально), вот что вам нужно:
Это предполагает, что вы хотите получить из источника . Если нет, замените источник на ваше удаленное имя.
источник
git fetch
иgit fetch remote
будет делать то же самое. Если вам нужно получить данные с пульта, кромеorigin
, вы можете сделать это с помощьюgit fetch <other_remote_name>
. Эта ситуация весьма необычна, только что упомянута здесь для полноты.Чтобы оформить заказ на myBranch, который существует удаленно, а не локально - это сработало для меня:
Я получил это сообщение:
источник
-t
?-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
чтобы исправить.checkout
за ним, чтобы создать его. Спасибо!--all
никогда не является хорошей идеей, потому что он будет загружать каждый файл в каждой ветви. Это займет больше времени и места. Это лучше быть конкретным с именем ветви и сделать , как этоИспользуйте
git branch -a
(как локальные, так и удаленные филиалы) илиgit branch -r
(только удаленные филиалы), чтобы просмотреть все пульты и их ветви. Затем вы можете сделатьgit checkout -t remotes/repo/branch
удаленный и создать локальную ветвь.Существует также команда git-ls-remote, чтобы увидеть все ссылки и теги для этого пульта.
источник
git checkout remotes/repo/branch
заставляет git checkout искать путь, а не удаленное хранилище.Название и вопрос перепутаны:
Если вопрос в том, как мне заставить работать удаленную ветку или как Git оформить заказ на удаленную ветку? Более простое решение:
С Git (> = 1.6.6) вы можете использовать:
Если local
<branch_name>
не найден, но существует ветвь отслеживания ровно на одном удаленном устройстве с соответствующим именем, обработайте его как эквивалент:Смотрите документацию для Git Checkout
Для вашего друга:
источник
Самый простой способ сделать это, по крайней мере, для меня:
источник
fetch
команды необходимая ветка будет доступна на локальном компьютере.git checkout -b 'your_branch' origin/'remote branch'
требуется оформить заказ этой ветки.Использование:
Это достаточно распространенная операция, которую Git предоставляет
--track
сокращение:На самом деле, это так часто, что есть даже ярлык для этого ярлыка. Если название ветви, которую вы пытаетесь оформить, (a) не существует и (b) точно совпадает с именем только на одном удаленном компьютере, Git создаст для вас ветку отслеживания:
Чтобы настроить локальную ветвь с именем, отличным от имени удаленной ветки, вы можете легко использовать первую версию с другим именем локальной ветки:
Теперь ваш местный филиал
sf
будет автоматически вытягиватьorigin/serverfix
.Источник: Pro Git, 2nd Edition , написанный Скоттом Чаконом и Беном Штраубом (вырезано для удобства чтения)
источник
С помощью этой простой команды:
источник
Чтобы получить ветку, существующую на удаленном компьютере, самый простой способ:
Вы можете увидеть, если он уже существует на удаленном с:
Это приведет к удаленной ветке к вашей локальной и автоматически отследит удаленную.
источник
Что помогло мне было
1) Для просмотра всех доступных удаленных веток (например, 'имя-удаленной ветки')
2) Создайте локальную ветку, используя имя удаленной ветки
источник
git push
без каких-либо других аргументов? Локальная ветвь с именемremote-branch-name
автоматически связывается с (отслеживая) удаленной веткой с именемorigin/remote-branch-name
. Или вам нужно бежатьgit push -u origin remote-branch-name
Вы также можете получить и оформить удаленную ветку за один раз:
источник
источник
Я набрал
и получил
источник
git checkout -b <branch_name> --track <remote>/<branch_name>
Иногда вас просят не возиться с основной веткой и работать только с удаленной веткой (как меня просили). Так что все, что вам нужно, это удаленная ветвь.
Чтобы клонировать удаленную ветку в одиночку (без мастера), сделайте это
где, remote_branch_name - это имя удаленной ветви
Например,
Это обеспечит клонирование удаленной ветви в вашу локальную ветку с именем удаленной ветви.
Теперь, если вы передадите свой код и нажмете, код будет отправлен только в эту ветку.
источник
[Быстрый ответ]
Есть много альтернатив, и мои любимые:
- Альтернатива 1:
- Альтернатива 2:
источник
Допустим, что ваш пульт - git@xyz.git, и вы хотите его ветвь random_branch. Процесс должен быть следующим:
Сначала проверьте список ваших пультов по
Если у вас нет удаленного git@xyz.git в выводе вышеприведенной команды, вы бы добавили его
Локальная ветка my_copy_random_branch будет отслеживать ветку random_branch вашего пульта.
источник
git fetch --all & git checkout <branch name>
источник
git fetch && git checkout <your friend's branch name>
должен сделать трюкисточник
Я хочу дать вам однострочную команду для извлечения всех удаленных веток в вашу локальную и переключения на желаемую вновь созданную локальную ветку:
После выполнения вышеуказанной команды вы получите следующее сообщение:
Первая строка гласит, что перешли на новую ветку - почему новая? Это уже там в удаленном!
Но на самом деле вы должны создать его локально. Ветка берется из удаленного индекса и создается для вас локально.
Вот
discover
новая ветка, которая была создана из удаленной ветки вашего хранилищаdiscover
.Но вторая строка дает больше информации, чем первая, которая говорит нам, что:
Наш филиал настроен на отслеживание удаленного филиала с тем же именем.
Хотя
git fetch
скинет все ветки на местные. Но если вы побежитеgit branch
за ним, вы увидите толькоmaster
ветку в локальной сети. Почему ?Потому что для каждой ветки, которую вы используете в удаленном режиме, вы также должны создавать ее локально, чтобы отслеживать ее,
git checkout <branchname>
как мы делали в приведенном выше примере.После запуска
git checkout
команды вы можете запуститьgit branch
, и теперь вы можете увидеть обе ветви:источник
Если вы хотите получить все удаленные ветки, просто введите:
источник
Просто попробуйте:
источник
Если у вас есть репозиторий, который был клонирован,
--depth 1
то многие из перечисленных команд не будут работать. Например, смотрите здесьВ этом случае я бы откинул хранилище, но, возможно, есть другие методы, например, git shallow clone (clone --depth) пропускает удаленные ветви
источник
Если вы уже знаете свою удаленную ветку вот так ...
и вы знаете название ветви, которую вы хотите оформить , например, br1.2.3.4 , затем выполните
Осталось только оформить заказ
Затем сделайте из него новые ветви.
источник
Шаги следующие:
git fetch origin
илиgit fetch --all
, это приведет к извлечению всех удаленных веток в ваш локальный, а затем это второй вариант, который вы можете использовать.git checkout --track origin/<The_remote_branch you want to switch over>
Затем поработайте над этой веткой, и вы можете проверить, находитесь ли вы в этой ветке или нет, набрав
Он отображает ветку, в которой вы находитесь.
источник
git branch <name> --track origin/<name>
источник
Проверьте ваш
.git/config
файл, в частности, какое отслеживание присутствует при извлечении для этого пульта.Если он
heads/*
указывает на тоrandomRemote/*
, когда вы запускаетеgit fetch randomRemote
он извлечет все ветви.Тогда вы можете просто проверить эту ветку.
В противном случае,
Вы должны добавить удаленные ветви к отслеживанию, используя это. Проверьте свой
.git/config
после запуска этого. Ты поймешь.Беги
git fetch randomRemote
. Это приведет к удаленной ветви.Теперь вы можете бежать
git checkout randomBranch
.источник
Вы используете 'git pull', чтобы разделить ветки. Я буду использовать фактические имена хранилищ и веток, чтобы помочь, поскольку «lbranch» и «rbranch» сложно расшифровать.
Давайте использовать:
Вы или любой коллега можете запустить это, чтобы вытянуть только вашу ветку, независимо от того, сколько существует веток:
источник
Простая команда,
git checkout remote_branch_name
поможет вам создать локальную ветку, в которой есть все изменения в удаленной ветке.источник
источник