Як я можу перейти на іншу гілку в git?


222

Який із цих рядків правильний?

git checkout 'another_branch'

Або

git checkout origin 'another_branch'

Або

git checkout origin/'another_branch'

І в чому різниця між цими рядками?



32
git checkout [branch]для більшості користувачів, які приходять до цього питання
— JGallardo

Відповіді:


225

Якщо another_branchвже існує локально і ви не перебуваєте на цій гілці, тоді git checkout another_branchпереключаєтесь на гілку.

Якщо another_branchне існує, але є origin/another_branch, то git checkout another_branchвін еквівалентний git checkout -b another_branch origin/another_branch; git branch -u origin/another_branch. Це потрібно створити another_branchз origin/another_branchі встановити origin/another_branchяк верхній потік another_branch.

Якщо жодного з них немає, git checkout another_branchповертається помилка.

git checkout origin another_branchповертає помилку в більшості випадків. Якщо originце редакція і another_branchє файлом, то вона перевіряє файл цієї редакції, але, швидше за все, це не те, що ви очікуєте. originв основному використовується в git fetch, git pullі git pushяк пульт дистанційного керування, псевдонім URL - адреса в віддаленому сховище.

git checkout origin/another_branchдосягає успіху, якщо origin/another_branchіснує. Це призводить до того, що він знаходиться в окремому стані HEAD, а не на будь-якій гілці. Якщо ви робите нові зобов’язання, нові коміти недоступні для жодних існуючих гілок, і жодна з гілок не буде оновлена.

ОНОВЛЕННЯ :

Оскільки вийшла 2.23.0, ми також можемо використовувати git switchдля створення та перемикання гілок.

Якщо fooіснує, спробуйте перейти на foo:

git switch foo

Якщо fooне існує , і origin/fooіснує, намагаються створити fooз , origin/fooа потім перейти до foo:

git switch -c foo origin/foo
# or simply
git switch foo

Більш загально, якщо fooцього не існує, спробуйте створити fooз відомого списку чи ввести, а потім перейдіть до foo:

git switch -c foo <ref>
git switch -c foo <commit>

Якщо ми підтримуємо сховище в Gitlab та Github одночасно, локальне сховище може мати два віддалених, наприклад, originдля Gitlab та githubGithub. У цьому випадку сховище має origin/fooі github/foo. git switch fooпоскаржиться fatal: invalid reference: foo, бо невідомо, з якої реф. origin/fooабо github/foo, щоб створити foo. Нам потрібно вказати його git switch -c foo origin/fooабо в git switch -c foo github/fooвідповідно до необхідності. Якщо ми хочемо створити гілки з обох віддалених гілок, краще використовувати відмінні назви для нових гілок:

git switch -c gitlab_foo origin/foo
git switch -c github_foo github/foo

Якщо fooіснує, спробуйте відтворити / примусити-створити fooз (або скинути fooна) відомий реф або виконувати, а потім переключіться на foo:

git switch -C foo <ref>
git switch -C foo <commit>

які еквівалентні:

git switch foo
git reset [<ref>|<commit>] --hard

Спробуйте переключитися на відокремлену ГОЛОВУ відомої посилання або виконувати:

git switch -d <ref>
git switch -d <commit>

Якщо ви просто хочете створити гілку, але не перейти на неї, скористайтеся git branchнатомість. Спробуйте створити відділення з відомого списку або виконувати:

git branch foo <ref>
git branch foo <commit>

24
Ця відповідь правильна (як зазвичай, і схвалена), але я додам коментар, який може бути корисним: git checkoutкоманда робить занадто багато речей, на мою думку. Ось чому тут так багато режимів роботи. Якщо єдине, що git checkoutбуло зроблено, - це перемикання гілок, відповідь була б простою, але вона також може створювати гілки та навіть витягувати файли з певних комітетів без перемикання гілок.
— торек

11
це правильна відповідь, але показує, як git ніби накручується в командному рядку. git checkout для перемикання відділення?
— Тханг

3
@thang Ну, з випуском 2.23.0 це виправлено: тепер ви можете використовувати git switchдля переходу до гілки.
— legends2k

Здається, комутатор не працює для цієї версії git. Що я використовую для переходу на іншу гілку в цій версії git? C: \ widget> git --version git версія 2.11.0.windows.3 C: \ widget> git switch master git: 'switch' - це не команда git. Див. "Git --help". C: \ widget>
— Іван

1
@John використовує git checkoutнатомість для старих версій, що також працює в сучасних версіях.
— ElpieKay

66

Перехід до іншої гілки в git. Відверта відповідь,

git-checkout - Переключення гілок або відновлення робочих файлів дерев

git fetch origin         <----this will fetch the branch
git checkout branch_name <--- Switching the branch

Перш ніж переключити гілку, переконайтеся, що у вас немає змінених файлів; у такому випадку ви можете ввести зміни або зберегти їх.


Остання команда переводить мене в стан окремого HEAD. Значить, не можна редагувати гілку.

2
Гілка, яку ви намагаєтеся оформити, не отримана, тоді вам потрібно отримати її перед тим, як оформити замовлення. Ви можете пропустити збір, якщо гілка оновлена, тоді просто використовуйте ім'я гілки для перевірки.
— висячий покажчик

Чи не було б достатнім, щоб виконати "git pull" після переходу на гілку?

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

17

[ git checkout "branch_name"]

ще один спосіб сказати:

[ git checkout -b branch_name origin/branch_name]

у випадку, якщо "ім'я гілки" існує лише віддалено.

[ git checkout -b branch_name origin/branch_name] корисний у випадку, якщо у вас є кілька віддалених.

Щодо [ git checkout origin 'another_branch'] Я не впевнений, що це можливо, AFAK ви можете це зробити за допомогою команди "fetch" - [ git fetch origin 'another_branch']


Я знаю команду "git checkout -b branchName" для створення іншої гілки. Це не було питання!

10

З Git 2.23 далі ви можете використовувати git switch <branch name>для перемикання гілок.


6

Що для мене спрацювало наступне:

Перехід до потрібної гілки:

git checkout -b BranchName

І тоді я потягнув "майстра" за:

git pull origin master

6

Корисні команди для роботи в повсякденному житті:

git checkout -b "branchname" ->  creates new branch
git branch                   ->  lists all branches
git checkout "branchname"    ->  switches to your branch
git push origin "branchname" ->  Pushes to your branch
git add */filename           -> Stages *(All files) or by given file name
git commit -m "commit message" -> Commits staged files
git push                     -> Pushes to your current branch

5

Якщо ви хочете, щоб гілка відстежувала віддалену гілку, яка дуже імпортується, якщо ви збираєтеся внести зміни до гілки та витягнути зміни тощо, вам потрібно використовувати Додати -t для фактичної реєстрації, наприклад: git checkout -t branchname


4

Перевірка: git branch -a

Якщо ви отримуєте лише одну гілку. Потім виконайте нижче кроки.

  • Крок 1 : git config --list
  • Крок 2: git config --unset remote.origin.fetch
  • Крок 3: git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/*

2
Цікаво, як ця серія команд перейшла б на іншу гілку.

Це може бути корисно зробити, коли ви раніше робили неглибокий клон (використовуючи depthпарам), і тепер задаєтесь питанням, чому ви не можете отримати інші віддалені гілки, error: pathspec 'another_branch' did not match any file(s) known to gitвикористовуючи команди, запропоновані вище. Це, звичайно, не те, про що було в первісному питанні, але це може допомогти іншим почухати голову.
— luciash d 'бути

0

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

git switch [відділенняName] АБО git checkout [branchName]

напр .: git перемикач розробляти АБО
git checkout розробити

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