Заплутане повідомлення про помилку від git


90

Я отримав це повідомлення від Git:

Ви просили витягнути з віддаленого "джерела", але не вказали гілку. Оскільки це не налаштований за замовчуванням пульт дистанційного керування для вашої поточної гілки, ви повинні вказати гілку в командному рядку.

Хтось може це пояснити? і що важливіше, як це виправити?

Відповіді:


89

Ви повинні сказати git, яку гілку ви хочете отримати з віддалених репозиторіїв "походження".

Думаю, вам потрібна гілка за замовчуванням (master), тому git pull origin masterслід вирішити вашу проблему.

Див git help branch, git help pullі git help fetch для отримання додаткової інформації.


2
щоб це працювало, мені довелося перевірити гілку "master" (гілка не була вибрана) і витягнути, що вирішило проблему.
cinek

@cinek: Так, git pullтягне і зливається з поточною гілкою, тому її поведінка повністю залежить від того, яку гілку виписано , а з від'єднаною ГОЛОВОЮ (жодна гілка не перевірена), він ніяк не може знати, яку гілку витягнути.
Cascabel

@cinek: Я припускав, що ти новачок у git, тому я визнаю, що ти знаходився в абсолютно стандартному стані на майстрі гілок, погано :-).
p4bl0

86

Щоб виправити це, припустивши, що ви знаходитесь на masterгілці і хочете витягнути masterгілку з originпульта, у досить нових версіях Git (1.8 або новіша):

git branch -u origin/master master

(Аналогічно для інших гілок та / або пультів дистанційного керування.)

Якщо ви можете поєднати це з натисканням, це ще коротше:

git push -u origin master

Після цього звичайний git pull/ git pushзробить те, що ви очікуєте.


Під час серії Git 1.7 git branchне було -uперемикача (лише git pushбуло), і натомість вам довелося використовувати набагато довше --set-upstream:

git branch --set-upstream master origin/master

Зверніть увагу на зміну аргументів порівняно з -u. Я не раз перебирав це замовлення.


Все це, до речі, є скороченням для виконання наступних дій, які ви все ще можете зробити явно:

git config branch.master.remote origin
git config branch.master.merge refs/heads/master

До 1.7 ви повинні були зробити це таким чином.


Я думаю, що команда у верхній частині (принаймні в моїй версії Git) встановлює для гілки під назвою "origin" значення "origin / master". Якщо вашу місцеву філію називають "господарем", я думаю, ви хотіли б:git branch --set-upstream master origin/master
Еван Донован,

Цікаво, що у моїй версії 1.8.5.3 ця -uопція недокументована git branch, що робить вашу документацію щодо неї ще більш важливою. І, як ви зауважили, опція була недоступна у версії 1.7. *. Оскільки -uце скорочення --set-upstream, чи не слід змінювати порядок аргументів, як це було зроблено --set-upstreamчерез коментар @ EvanDonovan?
конфорки

Однак, коли я використовую команду, яку ви показуєте ( git branch -u origin/master master), вона працює, як очікувалось / призначена для мене: "Майстер гілки налаштований для відстеження віддаленого майстра гілки від початку."
конфорки

1
@hobs: це насправді збочення Git. -uПеремикач насправді НЕ коротка форма --set-upstream. Його порядок аргументів фактично відмінений від порядку для --set-upstream. Думаю, лише пізніше --set-upstream-toбуло введено (зверніть увагу на «-to»), що -uє насправді короткою формою.
Арістотель Пагальціс

Оце Так! Справді заплутане. Дякую, що розплутали це для мене.
плити

3

Повідомлення точно говорить, про що йдеться. Ваша поточна гілка не пов’язана (не відстежується) з жодною гілкою походження . Отже, git не знає, що тягнути.

Що робити? Це залежить...

У найбільш звичайній ситуації ви відпрацьовуєте якусь локальну гілку xyz, яка розгалужується від ведучого, який клонується від майстра походження . Звичайний спосіб вирішити це - переключитися на master і натиснути, щоб синхронізувати його з початком, а потім повернутися до xyz і rebase master.

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

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