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 fetch
Twój Git kontaktuje się z innym Gitem na podstawie url
linii 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-remote
aby zobaczyć, jak to działa (spróbuj, to jest edukacyjne). Oto fragment tego, co otrzymuję, uruchamiając go w repozytorium Git dla git
siebie:
$ 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 fetch
wierszami w tej samej remote
sekcji. W tym przypadku, twój Git zastępuje refs/heads/master
się 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 .git
katalogu). Ten plik zapisuje pobrane nazwy i identyfikatory.
git pull
Komenda służy jako skrót wygoda: to działa git fetch
na 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 pull
narzeka i przestaje.
Jeśli uruchomisz to jako dwa osobne kroki, git fetch
a 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 fetch
z --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-Branch
nie 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.