Twoja konfiguracja wymaga scalenia z <nazwa oddziału> ze zdalnego, ale żadne takie odwołanie nie zostało pobrane.

202

Otrzymuję ten błąd przy pobieraniu:

Twoja konfiguracja łączy się ze zdalnym „refs / heads / feature / Sprint4 / ABC-123-Branch”, ale żadne takie ref nie zostało pobrane.

Ten błąd nie pojawia się w żadnym innym oddziale.
Szczególną cechą tej gałęzi jest to, że jest tworzona z poprzedniego zatwierdzenia innej gałęzi.

Mój plik konfiguracyjny wygląda następująco:

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
    hideDotFiles = dotGitOnly
[remote "origin"]
    url = <url here>
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "new-develop"]
    remote = origin
    merge = refs/heads/new-develop
[branch "feature/Sprint4/ABC-123-Branch"]
    remote = origin
    merge = refs/heads/feature/Sprint4/ABC-123-Branch
Farrukh Chishti
źródło
Czy możesz udostępnić polecenie, którego używasz do scalenia?
dchayka
1
Ten problem może wystąpić po usunięciu zdalnej gałęzi. Sprawdź dokładnie, czy naprawdę tam jest.
Benny Neugebauer,
4
Przyszli czytelnicy: jeśli wiesz, że istnieje zdalna gałąź, sprawdź, czy ignorujesz wielkość liter, czy nie. Skonfigurowałem oddział lokalny do śledzenia oddziału zdalnego, ale wpisałem nazwę pilota wszystkimi małymi literami. Musiałem tylko ponownie skonfigurować lokalny, aby śledził origin / BranchName zamiast origin / branchname
Jerreck
Właśnie miałem ten błąd i problem był znacznie prostszy niż poniższe odpowiedzi, straciłem połączenie VPN. Jest to również błąd, który pojawia się, gdy git nie może uzyskać dostępu do serwera zdalnego pochodzenia.
Ben Thurley
Mój serwer git był wyłączony. To jest przyczyna.
dellasavia

Odpowiedzi:

148

Co to znaczy

Twój nadrzędny - pilot, do którego dzwonisz origin- nie ma już, a może nigdy nie miał (nie można stwierdzić na podstawie samych informacji) oddziału o nazwie feature/Sprint4/ABC-123-Branch. Jest jeden szczególnie częsty powód: ktoś (prawdopodobnie nie ty, albo pamiętasz) usunął gałąź w innym repozytorium Git.

Co robić

To zależy od tego, czego chcesz . Zobacz sekcję dyskusji poniżej. Możesz:

  • utwórz lub ponownie utwórz gałąź na pilocie, lub
  • usuń lokalny oddział lub
  • wszystko inne, o czym możesz pomyśleć.

Dyskusja

Musisz działać git pull(jeśli był uruchomiony git merge, pojawił się inny komunikat o błędzie lub komunikat o błędzie w ogóle).

Po uruchomieniu git fetchTwój Git kontaktuje się z innym Gitem na podstawie urllinii pod [remote "origin"]sekcją konfiguracji. Że Git wykonuje polecenie ( upload-pack), która, między innymi, wysyła swój git listę wszystkich oddziałów. Możesz użyć, git ls-remoteaby zobaczyć, jak to działa (spróbuj, to jest edukacyjne). Oto fragment tego, co otrzymuję, uruchamiając go w repozytorium Git dla gitsiebie:

$ git ls-remote origin
From [url]
bbc61680168542cf6fd3ae637bde395c73b76f0f    HEAD
60115f54bda3a127ed3cc8ffc6ab6c771cbceb1b    refs/heads/maint
bbc61680168542cf6fd3ae637bde395c73b76f0f    refs/heads/master
5ace31314f460db9aef2f1e2e1bd58016b1541f1    refs/heads/next
9e085c5399f8c1883cc8cdf175b107a4959d8fa6    refs/heads/pu
dd9985bd6dca5602cb461c4b4987466fa2f31638    refs/heads/todo
[snip]

Do refs/heads/listy wpisy wszystkich oddziałów, które istnieją na pilocie, 1 wraz z odpowiednimi popełnić identyfikatory (na refs/tags/wpisach identyfikatory mogą wskazywać na tagu obiektów zamiast zobowiązuje).

Twój Git bierze każdą z tych nazw gałęzi i zmienia ją zgodnie z fetchwierszami w tej samej remotesekcji. W tym przypadku, twój Git zastępuje refs/heads/mastersię refs/remotes/origin/master, na przykład. Twój Git robi to z każdą napotkaną nazwą oddziału.

Zapisuje również oryginalne nazwy w specjalnym pliku FETCH_HEAD(możesz zobaczyć ten plik, jeśli zajrzysz do własnego .gitkatalogu). Ten plik zapisuje pobrane nazwy i identyfikatory.

git pullKomenda służy jako skrót wygoda: to działa git fetchna odpowiednim pilocie, a następnie git merge(lub, jeśli tak polecił, git rebase) o cokolwiek argumenty są potrzebne do scalenia (lub rebase) zgodnie z zaleceniami [branch ...]sekcji. W takim przypadku [branch "feature/Sprint4/ABC-123-Branch"]sekcja zawiera polecenie pobierania origin, a następnie scalania z dowolnym identyfikatorem znalezionym pod nazwą refs/heads/feature/Sprint4/ABC-123-Branch.

Ponieważ nic nie znaleziono pod tą nazwą, git pullnarzeka i przestaje.

Jeśli uruchomisz to jako dwa osobne kroki, git fetcha następnie git merge(lub git rebase), Twój Git spojrzy na twoje buforowane remotes/origin/gałęzie zdalnego śledzenia, aby zobaczyć, z czym się połączy lub na czym bazuje. Jeśli tam był taki oddział w tym samym czasie, można jeszcze oddział zdalnego śledzenia. W takim przypadku nie pojawi się komunikat o błędzie. Jeśli nigdy nie było takiej gałęzi lub biegniesz git fetchz --prune(która usuwa martwe gałęzie zdalnego śledzenia), a więc nie masz odpowiadającej gałęzi zdalnego śledzenia, otrzymasz skargę, ale będzie się ona odnosić do niej origin/feature/Sprint4/ABC-123-Branch.

W obu przypadkach możemy stwierdzić, że feature/Sprint4/ABC-123-Branchnie istnieje teraz na pilocie o nazwie origin.

Prawdopodobnie istniał kiedyś i prawdopodobnie utworzyłeś lokalny oddział z gałęzi zdalnego śledzenia. Jeśli tak, prawdopodobnie nadal masz gałąź zdalnego śledzenia. Możesz sprawdzić, kto usunął gałąź ze zdalnego i dlaczego, lub po prostu popchnąć coś, aby ją ponownie utworzyć, lub usunąć gałąź zdalnego śledzenia i / lub lokalny oddział.


1 Cóż, przynajmniej do tego się przyzna . Ale chyba, że ​​specjalnie ukryli niektóre referencje, lista zawiera wszystko.

Trek
źródło
Dziękujemy za wyjaśnienie, co właściwie robi polecenie git pull. Udało mi się rozwiązać problem, uruchamiając git fetch, a następnie scalając.
fizch
11
Aby usunąć nieistniejące zdalne odniesienia do oddziału w lokalnym repozytorium, użyjgit remote prune origin
Yoav
1
@ Ben-Uri: tak, albo bieg git fetch --prune originlub ustawić fetch.prunesię truew konfiguracji (wszystkie trzy mają zrobić to samo, choć w kilku wersjach Git niektóre z nich nie były bardzo wiarygodne).
torek
1
Musisz git checkout <your remote branch>i wszyscy będą dobrzy (w niektórych przypadkach).
Alexander Shtang
2
@JonathanBenn: możesz użyć, git branch --set-upstream-to=origin/master masteraby zmienić ustawienie upstream dla swojego lokalnego master. Usuń-i-odtwórz ma to jako efekt uboczny (zakładając, że używasz stylu DWIM, git checkout masteraby go stworzyć), z dodatkowym efektem ubocznym, wymuszając masterdopasowanie do twojego origin/master.
torek
71

Może się to również zdarzyć, jeśli zmienisz nazwę oddziału. Wykonaj następujące kroki (jeśli wiesz, że nazwa gałęzi została zmieniona) Zakładając, że wcześniejsza nazwa gałęzi to wrong-branch-namei ktoś zmienił jej nazwę na correct-branch-nameSo.

git checkout correct-branch-name

git pull (zobaczysz to „Twoja konfiguracja określa…”)

git branch --unset-upstream

git push --set-upstream origin correct-branch-name

git pull (nie dostaniesz wcześniejszej wiadomości)

Skrajny
źródło
1
Nie jest to nawet konieczne git pushi nie będzie działać, jeśli bieżąca gałąź znajduje się za pilotem. git pull origin correct-branch-namewystarczy.
Pierre,
1
Polecenie ustawienia w górę jest niepoprawne powyżej. Wykonaj git pull po operacji --unset-upstream, na wyjściu ściągnięcia można zobaczyć błąd, z poleceniem ustawienia upstream, jak poniżej, gałąź git --set-upstream-to = origin / <gałąź > mybranch
Ankit Marothi
Ładnie działało dla mnie po usunięciu niektórych dużych plików z mojego repozytorium i musiałem wrócić do nowego właśnie utworzonego repo
Larrytech
40

Sprawdź, czy zdalna gałąź jest dostępna do pobrania. Miałem ten sam problem, w końcu zdałem sobie sprawę, że gałąź zdalna została przez kogoś usunięta.

Malhaar Punjabi
źródło
4
Dla mnie było tak samo!
Aerin
3
Po żądaniu ściągnięcia połączenie (tj. Osoba, która dokonała scalenia) ma opcję usunięcia gałęzi, która została scalona z gałęzią docelową. Jeśli spróbujesz pociągnąć w tym momencie, otrzymasz ten błąd.
Artokun
to prawda :)
Malhaar Punjabi
7

Dla mnie była to kwestia rozróżniania wielkości liter. Mój oddział lokalny to Version_feature2 zamiast Version_Feature2. Ponownie sprawdziłem swoją gałąź, używając właściwej obudowy, a następnie git pull zadziałało.

nicko
źródło
2
To też był mój problem. Nie jest to konieczne w przypadku dość długich / skomplikowanych nazw gałęzi.
Håkon K. Olafsen
6

Ten błąd można również otrzymać, gdy w nazwie gałęzi źródłowej występuje problem ze sprawą.

Na przykład: gałąź pochodzenia jest, team1-Teama gałąź lokalna została zameldowana jako team1-team. Wtedy to Tw -Teami tw -teammoże być przyczyną takiego błędu. Stało się to w moim przypadku. Tak więc, zmieniając nazwę lokalną z nazwą gałęzi pochodzenia, błąd został rozwiązany.

akgupta
źródło
6

W moim przypadku po prostu brakowało początkowego zatwierdzenia na zdalnym oddziale, więc oddział lokalny nie znalazł niczego do pobrania i wyświetlał ten komunikat o błędzie.

Zrobiłem:

git commit -m 'first commit' // on remote branch
git pull // on local branch
Nicola Gallazzi
źródło
4

Otrzymałem podobny błąd, gdy faktyczną przyczyną było to, że mój dysk był pełny. Po usunięciu niektórych plików git pullzaczął działać zgodnie z oczekiwaniami.

użytkownik1747134
źródło
4

Nadal napotykałem ten problem. W moim przypadku komentarz @ Jerrecka na temat różnic w nazwach gałęzi był przyczyną tego błędu. Niektóre narzędzia Windows nie są świadome rozróżniania wielkości liter.

Aby wyłączyć rozróżnianie wielkości liter w git, uruchom następujące polecenie:

git config --global core.ignorecase true

Pamiętaj, że wpłynie to bardziej niż nazwy oddziałów. Na przykład, jeśli masz „Foo.h” i „foo.h” w tym samym katalogu (nie jest to świetny pomysł podczas tworzenia oprogramowania dla systemu Windows), podejrzewam, że nie możesz wyłączyć rozróżniania wielkości liter.

Stéphane
źródło
2

Wystarczy sprawdzić, czy ktoś zdalnie usunął gałąź.

AB Abhi
źródło
1

W moim przypadku usunąłem pierwotną gałąź, z której pochodzi moja bieżąca gałąź. Więc w pliku .git / config miałem:

[branch "simil2.1.12"]
    remote = origin
    merge = refs/heads/simil2.0.5
    rebase = false

simil2.0.5 został usunięty. Zastąpiłem go tą samą nazwą oddziału:

[branch "simil2.1.12"]
    remote = origin
    merge = refs/heads/simil2.1.12
    rebase = false

i zadziałało

Guilherme Campos Hazan
źródło
1

Możesz łatwo połączyć swój oddział lokalny ze zdalnym, uruchamiając:

git checkout <your-local-branch>
git branch --set-upstream-to=origin/<correct-remote-branch> <your-local-branch>
git pull
Gendos-ua
źródło
0

Dla mnie tak się stało, ponieważ połączyłem dewelopera gałęzi z masterem za pomocą interfejsu sieciowego, a następnie próbowałem zsynchronizować / pociągnąć za pomocą VSCode, który był otwarty w gałęzi dev (dziwne, że nie mogłem zmienić się na master bez otrzymania tego błędu).

git pull
Your configuration specifies to merge with the ref 'refs/heads/dev'
from the remote, but no such ref was fetched.'

Ma to sens, że nie można go znaleźć refs / heads / dev - dla mnie łatwiej było po prostu usunąć folder lokalny i ponownie sklonować.

Dawit
źródło
0

Właśnie dostałem dokładnie ten błąd, gdy wykonuję polecenie „git pull”, gdy mój dysk jest pełny. Stworzyłem trochę miejsca i wszystko znów zaczęło działać poprawnie.

użytkownik7550381
źródło
0

Możesz edytować ~/.gitconfigplik w folderze domowym. Tutaj zapisywane są wszystkie ustawienia --global.

Lub użyj git config --global --unset-all remote.origin.urli po uruchomieniu git fetchz adresem URL repozytorium.

Angelo Mendes
źródło
0

Miałem do czynienia z tym samym problemem, w którym moja obecna gałąź była deweloperem, a ja sprawdzałem gałąź MR i potem zacząłem ściągać git. Łatwe obejście, które podjąłem, to to, że utworzyłem nowy folder dla MR Branch i zrobiłem tam git, a następnie klon git.

Zasadniczo utrzymywałem różne foldery do przesyłania kodu do innej gałęzi.

Monalisa Das
źródło
0

Właśnie dostałem ten sam błąd, gdy nie użyłem właściwej skrzynki. Mógłbym sprawdzić „integrację”. Git kazał mi wykonać git pullaktualizację mojego oddziału. Zrobiłem to, ale otrzymałem wspomniany błąd. Prawidłowa nazwa oddziału to „Integracja” z wielką „I”. Kiedy sprawdziłem tę gałąź i wyciągnąłem, zadziałała bez problemu.

emi-le
źródło
-2

Jeśli kolejna próba po prostu działa, oznacza to, że Internet nie był podłączony.

Pirolistyczny
źródło
Szereg głosów negatywnych, a mimo to otrzymałem ten błąd. Miałem Internet, ale straciłem VPN na moim serwerze git. Po ponownym połączeniu z VPN ściąganie działało dobrze.
Ben Thurley