git: перемикайте гілку, не відриваючи голову


102

У мене є сховище на github з основною гілкою (master) та гілкою для деяких експериментальних робіт. Я зробив кілька комітетів і підштовхнувся до експериментальної гілки, і все було добре.

Тепер, на іншій машині, я намагаюся клонувати мій репозиторій (Git клон сховища ) , а потім перейти до експериментальної гілки (мерзотник контроль branchname ) , але кожен раз , коли я роблю це моя голова отримує стоїть окремо і я не можу натиснути мої зміни. Що я роблю неправильно? Я відчуваю, що я десь пропускаю фундаментальну концепцію git, але читання випадкових сторінок git man не дає мені ніяких підказів.

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

EDIT

Концепція галузі відстеження - це те, чого я бракував. Тепер, коли я стою цю концепцію, все зрозуміло. Особисто я вважаю git branch --trackсинтаксис набагато більш інтуїтивним, ніж git checkout -b branch-name origin/branch-name.

Дякую за допомогу!


Щоб переключити гілку, не відриваючи голову, з Git 2.23 (серпень 2019), використовуйте git switch: див. Мою відповідь нижче .
VonC

Відповіді:


115
# first time: make origin/branchname locally available as localname
git checkout -b localname origin/branchname 

# othertimes 
git checkout localname 

git push origin

Для зручності ви можете використовувати ту саму рядок для локальної назви та назви гілки.
Коли ви перевірили, origin/branchnameви не справді перевіряли гілку. origin/branchname"віддалене" ім'я, і ​​ви можете отримати їх список

branch -a 

Якщо ввімкнено кольори, місцеві гілки будуть одним кольором, а віддалені - іншим.

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


9
Людина, чому "git checkout origin / назва гілки" не починає автоматично відстежувати гілку, якщо вона ще не відстежується?
Мартін Конічек

4
тому що вам все ще потрібна місцева назва іноземної філії.
Кент Фредрік

Ось що я роблю, і повідомлення про помилку: $ git checkout -b topic / fetch upstream / topic / fetch fatal: git checkout: оновлення шляхів несумісне з комутацією гілок. Ви мали намір перевірити 'upstream / topic / fetch', який не може бути вирішений як фіксація?
улу

2
Дякую за пораду про кольори. Щоб увімкнути кольори:git config --global --add color.ui true
PonyEars

1
Варто зазначити, що "походження / ім'я гілки" може бути буквально будь-яким, що відповідає SHA1 або SHA1 само по собі =). Я регулярно використовую це для створення довільних гілок з довільним корінням.
Кент Фредрік

16
git clone git@github.com:abc/def.git
cd def

Тепер створіть гілку відстеження:

git branch --track experimental origin/experimental
git checkout experimental

Потім, попрацювавши там, просто натисніть на github by

git push

3
git гілка -t походження / експериментальна # не потрібно набирати стільки :)
Дастін

Гілка, яку я хочу відстежувати, називається тема / отримання. Коли я намагаюся зробити гілку $ git - відстежувати тему / витягувати за течією / тему / добирати, вона каже, фатальна: Недійсне ім'я об'єкта: 'upstream / topic / fetch'.
улу

1
@Dustin, ця команда створює локальну гілку 'origin / експериментальна', яка відстежує місцевого ведучого. Я здогадуюсь, це досить поширена помилка.
PDug

1
@PDug% git checkout -t походження / експериментальний експериментальний відділення, встановлене для відстеження віддалених експериментальних відділень від походження шляхом повторного використання. Перейшов до нової гілки "експериментально"
Дастін

11

Щоб розширити відповідь Кента, після того, як ви зробите ваш клон, єдиною гілкою, яку ви матимете (віддалені не враховуються), є та, яка була активною у сховищі, з якого ви клонували - master у вашому випадку.

Отже, спочатку вам потрібно створити нову гілку для відстеження віддаленої експериментальної гілки:

$ git branch experimental origin/experimental

а потім перевірити це:

$ git checkout experimental

Однак Кент правильний - ці дві команди можна комбінувати

$ git checkout -b experimental origin/experimental

3

З Git 2.23 (серпень 2019 року) ви б використовували git switchкоманду

Якщо у вас є однойменна віддалена гілка, вона буде автоматично відстежена:

$ git switch new-topic
Branch 'new-topic' set up to track remote branch 'new-topic' from 'origin'
Switched to a new branch 'new-topic'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.