Як я можу перейти на іншу гілку в 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.