TL; DR: Mam „śledzoną” gałąź, której nie mogę wyciągnąć.
Więc jestem w "wiadrze-4":
$ git branch -v
bucket-1 410f7b5 * gh-53 * gh-48 * "Share App"
bucket-2 7ed70a2 * upgrade to SOLR 3.3.0
bucket-3 400ffe4 * emergency fix prod issue
* bucket-4 64c2414 Merge branch 'bucket-3' into bucket-4
master 8dc4854 [ahead 1] * gh-73
Chciałbym pobrać zmiany z mojego pilota:
$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.bucket-4.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.
If you often merge with the same branch, you may want to
use something like the following in your configuration file:
[branch "bucket-4"]
remote = <nickname>
merge = <remote-ref>
[remote "<nickname>"]
url = <url>
fetch = <refspec>
See git-config(1) for details.
Hmm, dziwne, pomyślałem, że dodałem już „wiadro-4” jako gałąź śledzącą. Zobaczmy:
$ git remote show origin
* remote origin
Fetch URL: [email protected]:abcd/main.git
Push URL: [email protected]:abcd/main.git
HEAD branch (remote HEAD is ambiguous, may be one of the following):
bucket-3
master
Remote branches:
bucket-1 tracked
bucket-2 tracked
bucket-3 tracked
bucket-4 tracked
master tracked
Local branches configured for 'git pull':
bucket-1 merges with remote bucket-1
bucket-2 merges with remote bucket-2
bucket-3 merges with remote bucket-3
master merges with remote master
Local refs configured for 'git push':
bucket-1 pushes to bucket-1 (up to date)
bucket-2 pushes to bucket-2 (up to date)
bucket-3 pushes to bucket-3 (up to date)
bucket-4 pushes to bucket-4 (local out of date)
master pushes to master (fast-forwardable)
Rzeczywiście, bucket-4 jest oznaczony jako „śledzony”, ale w jakiś sposób jest skonfigurowany do wypychania, ale nie do ściągania.
Patrząc na mój .git/config
plik, widzę, że mam wpisy „zdalne” i „scalające” dla większości moich gałęzi, ale nie dla zasobnika-4. Jak to w ogóle jest uważane za „śledzone” bez tego?
[remote "origin"]
url = [email protected]:abcd/main.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[branch "rel-2011-07-07"]
remote = origin
merge = refs/heads/rel-2011-07-07
[branch "bucket-1"]
remote = origin
merge = refs/heads/bucket-1
[branch "bucket-2"]
remote = origin
merge = refs/heads/bucket-2
[branch]
autosetupmerge = true
[branch "bucket-3"]
remote = origin
merge = refs/heads/bucket-3
Widzę, że prawdopodobnie rozwiązaniem jest tutaj, aby dodać remote/merge
wpisy do wiadra-4 w moim pliku konfiguracyjnym. Ale jak to jest uważane za „śledzone” bez tego? bucket-4 został utworzony lokalnie, a następnie wysłany na serwer z tego repozytorium, więc podejrzewam, że jakoś nie skonfigurowałem poprawnie śledzenia dla tej gałęzi.
Czy jest jakaś konfiguracja, którą mogę dodać, aby wszystkie lokalne oddziały prawidłowo śledziły swoje piloty w przyszłości?
Odpowiedzi:
Mówi
bucket-4 pushes to bucket-4
tylko dlatego, że domyślnym ustawieniem podczas wypychania gałęzi jest umieszczenie jej na pilocie o pasującej nazwie. (Należy pamiętać, że jest to nadal ustawienie domyślne, nawet jeśli lokalna gałąź śledzi gałąź zdalnego śledzenia, a gałąź zdalnego śledzenia odpowiada gałęzi o innej nazwie w zdalnym repozytorium).Najprostszym sposobem skonfigurowania powiązania między twoim
bucket-4
abucket-4
inorigin
jest upewnienie się, że następnym razem zrobisz:Alternatywnie możesz:
Aby odpowiedzieć bezpośrednio na kilka pytań:
W tym przypadku tak nie jest - nie śledzi gałęzi zdalnego śledzenia w żadnym sensie, jeśli nie ma jej
branch.bucket-4.merge
lubbranch.bucket-4.remote
w konfiguracji git. Dane wyjściowe zgit remote show origin
po prostu pokazują, gdzie gałąź zostanie domyślnie wypchnięta.Myślę, że nie ma. Kiedy tworzyłeś
bucket-4
lokalnie, jak zakładam, gałąź zdalnego śledzenia nie istniała, więc nie można jej w tym momencie skonfigurować - byłoby to bardzo mylące zachowanie domyślne. Musisz tylko pamiętać, aby dodać-u
swoją pierwszągit push
gałąź do jej repozytorium.Mam nadzieję, że to trochę pomoże.
źródło
git branch --set-upstream
zadziałało idealnie dla mnie przed wykonaniem pullgit --set-upstream <branch> origin/<branch>
się błąd, ponieważ flaga jest przestarzała. Zaleca się użyciegit branch --track origin/<branch>
lub--set-upstream-to
zgodnie z drugą odpowiedzią. Myślę, że odpowiedź mogłaby zostać zaktualizowana, @MarkLongair?git branch --set-upstream <branch> origin/<branch>
został uznany za przestarzały co najmniej od 1.8.2.3 (moja wersja).Użyj
git branch --set-upstream-to=origin/<branch> <branch>
zamiast tego.źródło