Git checkout: оновлення контурів несумісне з комутацією гілок


467

Моя проблема пов'язана з помилкою Fatal Git при перемиканні гілки .

Я намагаюся отримати команду віддаленої гілки

git checkout -b local-name origin/remote-name

але я отримую це повідомлення про помилку:

фатальний: git checkout: оновлення контурів несумісне з комутацією гілок.
Ви мали намір перевірити "походження / ім'я віддаленого імені", яке не може бути вирішено як фіксація?

Якщо я вручну створюю гілку, а потім витягаю віддалену гілку, вона працює, подібно до створення нового клону та перевірки гілки.

Чому це не працює в сховищі, з яким я працюю?


1
що змінилося з першого екземпляра цієї команди (викликає повідомлення про помилку)?
VonC

git init git fetch git fetch git: //blabla.com/dir1/Project.git

Відповіді:


739

Я вважаю, що це відбувається, коли ви намагаєтесь оформити віддалену гілку, про яку ваша місцева компанія git repo ще не знає. Спробуйте:

git remote show origin

Якщо віддалене відділення, яке ви хочете отримати, знаходиться в розділі "Нові віддалені гілки", а не "Відслідковане віддалене відділення", то спочатку потрібно отримати їх:

git remote update
git fetch

Тепер це має працювати:

git checkout -b local-name origin/remote-name

7
Це вирішило для мене проблему, а не вищевказану умовну відповідь.
Jessedc

21
Це має бути "git fetch REPOSITORY_NAME", щоб отримати всі гілки цього сховища.
Майк Томсен

1
не обов'язково. git fetchотримає всі гілки з усіх віддалених репостів.
Майкл Грініч

4
У випадку, якщо хтось інший бореться з цілковитою божевільністю всього цього: git fetch origin / назва гілки не є тим самим, як git fetch. Перший просто призводить до "нового (наступний збір буде зберігатися у віддаленому / початковому)", відображаючись у стовпці, видимому через git віддалене шоу.
Олександр Келлетт

7
Якщо ви намагаєтеся зробити це для віддаленого пристрою, який ви явно додали (так що нічого іншого, крім походження ), вам потрібно буде зробити, git remote updateперш ніж ваш збірник вибере цей пульт. В іншому випадку ви отримуєте повідомлення типу " Did you intend to checkout 'upstream-repo/master' which can not be resolved as commit?Будь ласка, додайте це у відповідь" і заощадите людям години, щоб прочитати ті самі відповіді, які працюють лише за походженням.
Бруно Броноський

150

Черговий синтаксис,

git fetch origin remote_branch_name:local_branch_name

12
Це працювало для мене. Назва моєї віддаленої філії не походження Я не знаю, чи це має значення, оскільки я п'ю горілку.
Ріміан

13
Це не просто альтернативний синтаксис, але може працювати, коли git checkout -b origin_name origin / branch_name не працює
codercake

1
Це також вирішило мою проблему під час запуску "git checkout - track origin / remote-branch", який спочатку дав ту саму помилку, що й ОП до виправлення. Дякую!
kakyo

1
Працював для мене після запуску також підтвердженої відповіді.
AsTeR

2
Так, я підозрюю, що --depthкласифікатор оригінального клону може бути тут винним. Я мав успіх, git fetch remote_branch_name:local_branch_nameале всі інші поради не змогли.
Джон Келлехер

46

Спробувавши більшу частину того, що я міг прочитати в цій темі без успіху, я наткнувся на це: Віддалена гілка не відображається у "git branch -r"

Виявилося, що мій .git / config файл був неправильним. Після простого виправлення з'явилися всі гілки.

Ідучи з

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/master:refs/remotes/origin/master

до

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*

Зробив трюк


4
Це дійсно дивна конфігурація. Він говорить git лише забирати головну гілку з віддаленого.
Іке

3
Я би проголосував за це 10 разів, якби міг! - здається, це щось, що робить новий git під час клонування
mpapis

2
У мене була така ж проблема, це зводило мене з розуму. Хто не бачить віддалених гілок, будь ласка, перевірте це !!
Карлос Гранадос

Дякую богу за вашу відповідь :)
Sacha

Розум = роздутий! Дякую!
Chiranjib

12

Не впевнені, чи це корисно чи точно стосується вашого питання, але якщо ви намагаєтеся отримати та оформити лише одну гілку з віддаленого сховища, то наступні команди git виконають трюк:

url= << URL TO REPOSITORY >>
branch= << BRANCH NAME >>

git init
git remote add origin $url
git fetch origin $branch:origin/$branch
git checkout -b $branch --track origin/$branch

11

ніщо з перерахованого вище не працювало для мене. Моя ситуація дещо інша, моя віддалена гілка не за походженням . але в іншому сховищі.

git remote add remoterepo GIT_URL.git
git fetch remoterepo
git checkout -b branchname remoterepo/branchname

порада: якщо ви не бачите віддалену гілку на наступному виході git branch -v -a, немає можливості перевірити її.

Підтверджено роботу над 1.7.5.4


arf, просто зрозумій, що VirtualStaticVoid мав те саме рішення!
Олів'є Рефало

+1 для git branch -v -a: У мене був неправильно налаштований пульт, який сказав, fetch = +refs/heads/*:refs/remotes/master/*навіть якщо віддалений дзвонив upstream.
кефлавич

7

Для мене те, що працювало:

git fetch

Який перетягує всі відгуки на вашу машину для всіх відділень на віддаленому. Тоді я міг би зробити

git checkout <branchname>

і це працювало чудово. Аналогічно відповіді вгорі проголосували, але трохи простіше.


4

Я підозрюю, що немає віддаленої гілки з ім'ям віддаленого імені, але ви ненароком створили локальну гілку з назвою origin / remote-name.

Чи можливо ви в якийсь момент набрали:

походження гілки git / remote-name

Таким чином створюється локальна філія з назвою origin / remote-name? Введіть цю команду:

git checkout origin / remote-name

Ви побачите:

Перехід до гілки "походження / віддалене ім'я"

що означає, що це дійсно неправильно названа локальна філія, або

Примітка: перехід до "origin / rework-isscoring", який не є локальним відділенням
Якщо ви хочете створити нове відділення з цієї каси, ви можете зробити це
(зараз або пізніше), використовуючи -b з командою checkout знову. Приклад:
  git checkout -b 

що означає, що це справді віддалена гілка.


3

Це не дуже інтуїтивно, але це добре працює для мене ...

  mkdir remote.git & cd remote.git & git init
  git remote add origin $REPO
  git fetch origin $BRANCH:refs/remotes/origin/$BRANCH        

ТОЛЬКО запустити гілку git - команда трек ...

  git branch --track $BRANCH origin/$BRANCH

2

Для мене був помилковий друк, і моє віддалене відділення не існувало

Використовуйте git branch -aдля переліку віддалених гілок


1

Чи можна пов’язати вашу проблему з цим іншим запитанням "проблема замовлення" ?

тобто: проблема, пов'язана з:

  • стара версія Git
  • цікавий синтаксис оформлення замовлення, який повинен бути: git checkout -b [<new_branch>] [<start_point>]із [<start_point>]посиланням на назву комісії, на якій запустити нову гілку, і 'origin/remote-name'це не так.
    (тоді як git branchпідтримує початкову точку називати віддаленою гілкою)

Примітка. Про це говорить сценарій checkout.sh :

  if test '' != "$newbranch$force$merge"
  then
    die "git checkout: updating paths is incompatible with switching branches/forcing$hint"
  fi

Це як синтаксис git checkout -b [] [remote_branch_name] був і перейменований на гілку, і скинув нову вихідну точку нової гілки, що вважається несумісним.


Проблема вирішена. git checkout -b віддалене / віддалене відділення локальної назви насправді працює
Ikke

1
Цікаво, що змінилося з першого примірника цієї команди (запускаючи повідомлення про помилку)?
VonC

1

Після отримання мільйона разів все-таки додані дистанційні не з’являлися, хоча краплі були в басейні. Виявляється, параметр --tags не повинен надаватися з git remote addбудь-якої причини. Ви можете видалити його вручну з .git / config, щоб змусити git fetch створити refs.

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