Версія TL; DR: гілка дистанційного відстеження origin/master
існувала раніше, але не існує, тому місцева гілка source
відстежує щось, чого не існує, що в кращому випадку є підозрілим - це означає, що інша функція Git не може нічого зробити для вас - і Git попереджає вас про це. Ви добре ладнали, не працюючи за призначенням функції "стеження за потоком", тож вирішувати, чи щось змінити.
Щоб дізнатися про інші налаштування вище, читайте в розділі Чому я повинен "git push --set-upstream origin <branch>"?
Це попередження - це нова річ у Git, яка з’являється першою у Git 1.8.5. Примітки до випуску містять лише один короткий пункт про це:
- "git гілка -v -v" (і "статус git") не розрізняла гілку, яка не базується на будь-якій іншій гілці, гілку, яка синхронізується з її гілкою вище за течією, і гілку, налаштовану з висхідним потоком галузь, якої більше не існує.
Щоб описати, що це означає, спочатку потрібно знати про "віддалені", "гілки дистанційного відстеження" та як Git обробляє "відстеження вгору за течією". ( Гілки віддаленого відстеження - це жахливо хибний термін. Натомість я почав використовувати назви віддаленого відстеження , що, на мою думку, є незначним вдосконаленням. Нижче, однак, я буду використовувати "відділення віддаленого відстеження" для узгодження з документацією Git. )
Кожен "дистанційний" - це просто ім'я, як, наприклад, origin
або octopress
в цьому випадку. Їх мета - записати такі речі, як повна URL-адреса місць, з яких ви git fetch
або git pull
оновлення. Під час використання 1 Git переходить до цього віддаленого пристрою (використовуючи збережену URL-адресу) та передає відповідний набір оновлень. Він також записує оновлення, використовуючи "гілки дистанційного відстеження".git fetch remote,
"Гілка віддаленого відстеження" (або ім'я віддаленого відстеження) - це просто запис назви гілки як останнього, яку бачили на деякому "віддаленому". Кожен пульт є самим сховищем Git, тому він має гілки. Гілки віддаленого "походження" записуються у вашому локальному сховищі під remotes/origin/
. Текст , який ви показали , каже , що є філія імені source
на origin
, і гілки по імені 2.1
, linklog
і так далі на octopress
.
(Звичайно, "звичайна" або "локальна" гілка - це лише назва гілки, яку ви створили у власному сховищі.)
Нарешті, ви можете встановити (локальну) гілку, щоб "відстежувати" "гілку віддаленого відстеження". Після встановлення локальної гілки L
для відстеження гілки віддаленого відстеження R
, Git зателефонує R
її "вище за течією" та скаже вам, чи ви "вперед" та / або "позаду" за верхнім потоком (з точки зору комітетів). Це нормально (навіть рекомендую-стан) для місцевого відділення і дистанційного відстеження гілок використовувати той же ім'я (для віддаленої приставки частини), як source
і origin/source
, але це на самому справі не потрібно.
І в цьому випадку цього не відбувається. У вас є місцева гілка, яка source
відстежує гілку дистанційного відстеження origin/master
.
Вам не потрібно знати точну механіку того, як Git встановлює локальну гілку для відстеження віддаленої, але вони є релевантними нижче, тому я покажу, як це працює. Ми почнемо з вашим локальним ім'ям філії, source
. Існує дві записи конфігурації, що використовують це ім'я, написані branch.source.remote
та branch.source.merge
. З результату, який ви показали, зрозуміло, що вони обидва встановлені, так що ви побачили б наступне, якщо виконували дані команди:
$ git config --get branch.source.remote
origin
$ git config --get branch.source.merge
refs/heads/master
Збираємо їх разом, 2 це говорить про те, що Git ваша гілка source
відстежує «віддаленого відстеження гілки», origin/master
.
Але тепер подивіться на результат git branch -a
, який показує всі локальні і віддалені відстеження імен гілок у вашому сховищі. Імена віддаленого відстеження перелічені під remotes/
... і немаєremotes/origin/master
. Імовірно, був свого часу, але зараз він пропав.
Git повідомляє, що можна видалити інформацію відстеження за допомогою --unset-upstream
. Це очистить branch.source.origin
і те branch.source.merge
, і припинить попередження.
Здається, досить ймовірно, що те, що ви хочете, - це перейти від відстеження origin/master
до відстеження чогось іншого: можливо origin/source
, але, можливо, одне з octopress/
назв.
Ви можете зробити це з git branch --set-upstream-to
, 3 , наприклад:
$ git branch --set-upstream-to=origin/source
(якщо припустити, що ви все ще знаходитесь у відділенні "джерело", і origin/source
це те, що ви хочете - немає способу мені сказати, який з них, якщо такий є, ви хочете, хоча).
(Див. Також Як зробити існуючу гілку Git віддаленою гілкою? )
Я думаю, що ти потрапив сюди, це те, що коли ти вперше робив git clone
, річ, з якої клонували, мала гілку master
. У вас також була гілка master
, яку було встановлено для відстеження origin/master
(це нормальна, стандартна настройка для git). Це означало, що ви мали branch.master.remote
і branch.master.merge
встановили, щоб origin
і refs/heads/master
. Але потім ваш origin
пульт змінив назву з master
на source
. Я вважаю, що ви також змінили місцеву назву з master
на source
. Це змінило імена ваших налаштувань, від branch.master.remote
до branch.source.remote
і від branch.master.merge
до branch.source.merge
... але він залишив старі значення , так branch.source.merge
тепер не так.
Саме в цей момент "вгору" посилання зірвалася, але у версіях Git, старших за 1.8.5, Git ніколи не помічав порушеної настройки. Тепер, коли у вас є 1.8.5, це вказує на це.
Це охоплює більшість питань, але не те, "чи потрібно це виправляти". Цілком ймовірно, що ви вже багато років працюєте навколо розбитості, роблячи (наприклад, ). Якщо ви будете продовжувати це робити, вона продовжуватиме вирішувати проблему - так, ні, вам не потрібно її виправляти. Якщо ви хочете, ви можете використовувати , щоб видалити вгору і припинити скарги і не має місцеве відділення відзначено як такі, що будь - яких вгору по течії на всіх.git pull remote branch
git pull origin source
--unset-upstream
source
Сенс вгору за течією - зробити різні операції зручнішими. Наприклад, git fetch
після цього git merge
, як правило, "зробить правильно", якщо параметр вище за течією встановлений правильно, а git status
після git fetch
скаже, чи відповідає ваше репо рейтингу для цієї гілки.
Якщо ви хочете зручності, встановіть її за течією.
1git pull
використовує git fetch
, а станом на Git 1.8.4, ця (нарешті!) Також оновлює інформацію про "відділення дистанційного відстеження". У старих версіях Git оновлення не записувались у відділеннях віддаленого відстеження git pull
, лише за допомогою git fetch
. Оскільки ваш Git повинен мати принаймні версію 1.8.5, це не є проблемою для вас.
2 Ну, це плюс лінія конфігурації, яку я навмисно ігнорую, що знаходиться під remote.origin.fetch
. Git має зіставити ім'я "злиття", щоб зрозуміти, що повна локальна назва віддаленої гілки refs/remotes/origin/master
. Відображення майже завжди працює точно так само , як це, хоча, так що це передбачувано , що master
йде в origin/master
.
3 Або, с git config
. Якщо ви просто хочете встановити верхній потік на origin/source
єдину частину, яка має змінитись branch.source.merge
, і git config branch.source.merge refs/heads/source
це зробить. Але --set-upstream-to
говорить те, що ви хочете зробити, а не змушувати вас робити це самостійно вручну, тож це "кращий спосіб".