"Неможливо оновити шляхи та одночасно перейти до гілки"


186

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

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

$ git checkout -b test --track origin/master
fatal: Cannot update paths and switch to branch 'test' at the same time.
Did you intend to checkout 'origin/master' which can not be resolved as commit?

Чому Git не подобається? Це працювало з тим же репо.


6
Повідомлення про помилку повідомляє вам, що origin/masterце не ідентифікатор фіксації, тобто не допустима віддалена гілка. Чи відображається це у git branch -rвиході?
torek

Це не сталося. Виявляється, я не перевірив усіх віддалених гілок під час клонування.
насмішливо

Відповіді:


199

' origin/master' які не можуть бути вирішені як прихильність

Дивно: вам потрібно перевірити свої пульти:

git remote -v

І переконайтеся, що originце знайдено:

git fetch origin

Тоді:

git branch -avv

(щоб побачити, чи ви дістали origin/masterгілку)

Нарешті, використовуйте git switchзамість плутаниниgit checkout Git 2.23+ (серпень 2019 року).

git switch -c test --track origin/master

11
У моїй команді був помилковий помилок, який викликав цю помилку; Я не правильно написав свій пульт!
qix

2
Це була нова філія, і мій місцевий сховище не знав про це. Мені довелося зробити pullі тоді ця команда спрацювала.
coding_idiot

2
Ця відповідь була корисною, тому що вона показала мені, що дійсно відбувається щось дивне: Пульти встановлені правильно, але нова віддалена гілка просто не знайдена. Коли я клоную пульт у чистий каталог, він працює. Може мій .gitкаталог якось пошкоджений?
Конрад Рудольф

git remote -v повернув цю помилку фатально: Неправильне ім'я об'єкта: 'remote'.
Карим Самір

@KarimSamir ви можете задати окреме запитання (з вашою ОС та версією git), як це git remote -vвиконується в git repo.
VonC

79

FWIW: Якщо у назві вашої гілки є помилка друку, ви отримаєте цю ж помилку.


4
Насправді було б непогано, якби хтось міг витратити час, щоб розповісти про це розробникам Git, повідомлення про помилку не дуже інформативне;)
Scorchio

8
так, це була моя проблема, я мав місце у назві своєї філії
Карім Самір

Те саме тут я намагався git checkout -b origin mybranchзамість git checkout -b mybranch(додатково origin)
Гійом Ренульт

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

Я намагався оформити замовлення orgin/my-branchзамість origin/my-branch. Пропущений один iі я деякий час чухав голову, щоб зрозуміти, чому старий союзник відмовляється ладитись. Друкарня справді була проблемою.
DDM

55

Ви можете отримати цю помилку в контексті, наприклад, збірки Travis, яка за замовчуванням перевіряє код git clone --depth=50 --branch=master. Наскільки мені відомо, ви можете керувати --depthчерез, .travis.ymlале не --branch. Оскільки це призводить до того, що віддаленою відслідковується лише одна гілка, вам потрібно самостійно оновити пульт, щоб відстежувати відповідні результати потрібного віддаленого.

Перед:

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master

Виправлення:

$ git remote set-branches --add origin branch-1
$ git remote set-branches --add origin branch-2
$ git fetch

Після:

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/branch-1
remotes/origin/branch-2
remotes/origin/master

5
Вирішили це для мене. Я використовував неглибокий --depth = 1 клон, і це мені було потрібно для перемикання гілок.
Sawtaytoes

1
Га, так, справа в глибині, безумовно, призводить до цієї помилки! Якщо можливо, я б запропонував редагувати перші кілька речень, щоб підкреслити глибину.
Дабслов

19

Ця проста річ працювала для мене!

Якщо він говорить, що не може робити 2 речі одночасно, розділіть їх.

git branch branch_name origin/branch_name 

git checkout branch_name

Полегшує з’ясувати, яка справжня проблема
З. Хулла

9

Ви можете виконати наступні кроки, коли натрапите на це питання:

  1. Виконайте наступну команду, щоб перелічити гілки, відомі для вашого локального сховища.

git віддалене шоу походження

який виводить це:

 remote origin
  Fetch URL: <your_git_path>
  Push  URL: <your_git_path>
  HEAD branch: development
  Remote branches:
    development                             tracked
    Feature2                                tracked
    master                                  tracked
    refs/remotes/origin/Feature1         stale (use 'git remote prune' to remove)
  Local branches configured for 'git pull':
    Feature2     merges with remote Feature2
    development  merges with remote development
    master       merges with remote master
  Local refs configured for 'git push':
    Feature2     pushes to Feature2     (up to date)
    development  pushes to development (up to date)
    master       pushes to master      (local out of date)
  1. Після перевірки таких деталей, як (отримана URL-адреса тощо), запустіть цю команду, щоб отримати будь-яку нову гілку (тобто, яку ви хочете оформити у місцевому репо-репортажі), яка існує у віддаленому, але не у вашому локальному регіоні.
» git remote update

Fetching origin
From gitlab.domain.local:ProjectGroupName/ProjectName
 * [new branch]      Feature3    -> Feature3

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

» git checkout -b Feature3 origin/Feature3

Branch Feature3 set up to track remote branch Feature3 from origin.
Switched to a new branch 'Feature3'

Не потрібно прямо говорити Git відслідковувати (використовуючи --track ) гілку з віддаленим.

Наведена вище команда встановить локальну гілку для відстеження віддаленої гілки від її походження.


4

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


1

Для мене мені потрібно було додати пульт:

git remote -add myRemoteName('origin' in your case) remoteGitURL

тоді я міг отримати

git fetch myRemoteName

1

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

git remote update
git fetch
git checkout -b branch_nameA origin/branch_nameB

Я вирішив свою проблему просто зараз….


0

Спочатку вам потрібно Fetchвидалити (конкретну гілку), потім ви можете створити локальний br і відстежити його за допомогою цієї віддаленої гілки за допомогою своєї команди (тобто checkoutз -b і --track).


0

Вам слід зайти в підмодуль і побігти git status.

Можливо, ви побачили, що багато файлів було видалено. Ви можете бігати

  1. git reset .

  2. git checkout .

  3. git fetch -p

  4. git rm --cached submodules // submoudles - ваше ім’я

  5. git submoudle add ....


0

Ви можете використовувати ці команди: git віддалене оновлення, git fetch, git checkout -b branch_nameA походження: ім'я гілкиB

Я думаю, може, це тому, що ваша місцева філія не може відстежувати віддалену гілку

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