Najlepiej wyjaśnić to na przykładzie: jestem na gałęzi 0.58 repozytorium i tak go wyciągam:
git pull origin 0.58
Kiedy nazywam „git pull”, otrzymuję:
ip238:openlierox az$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.0.58.merge' in
your configuration file does not tell me either. Please
name which branch you want to merge on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details on the refspec.
If you often merge with the same branch, you may want to
configure the following variables in your configuration
file:
branch.0.58.remote = <nickname>
branch.0.58.merge = <remote-ref>
remote.<nickname>.url = <url>
remote.<nickname>.fetch = <refspec>
See git-config(1) for details.
Wygląda na to, że zapomniałem jakiejś opcji (--track?), Kiedy sprawdzałem tę gałąź. W każdym razie ustawiłem to teraz:
git config branch.0.58.merge 0.58
git config branch.0.58.remote origin
I wydaje się, że to działa. Następnie, tylko ze względu na zainteresowanie, przyjrzałem się innej gałęzi dotyczącej tych ustawień:
ip238:openlierox az$ git config branch.0.57.merge
refs/heads/0.57
ip238:openlierox az$ git config branch.0.57.remote
origin
Zastanawiałem się teraz, czy jest różnica między „0,58”, czy powinienem określić „refs / heads / 0.58”?
Jaka jest dokładnie różnica?
heads
z „S”.Odpowiedzi:
A
ref
to wszystko, co wskazuje na zatwierdzenie, na przykład gałęzie (głowy), tagi i zdalne gałęzie. Powinieneś widzieć głowy, piloty i tagi w swoim.git/refs
katalogu, zakładając, że masz wszystkie trzy typy referencji w swoim repozytorium.refs/heads/0.58
określa gałąź o nazwie 0.58. Jeśli nie określisz, w której przestrzeni nazw znajduje się ref, git będzie szukał domyślnych. To sprawia, że użycie tylko 0,58 jest niejednoznaczne - możesz mieć zarówno gałąź, jak i tag o nazwie 0,58.źródło
refs/heads/
irefs/remotes/
irefs/tags/
Tylko dla kogoś, kto jest zaciekawiony -
git show-ref
dostępne od wersji Git v1.8.2.2, pokaże wszystkie odniesienia, które masz w swoim lokalnym repozytorium.źródło
git log --decorate=full
Widzisz,
branchName
musi zostać w pełni rozwiązany, zanim GIT będzie mógł to zidentyfikować. W pełni rozpoznana nazwa torefs/heads/branchName
.Jedno ze słynnych poleceń w
git checkout branchName
rzeczywistości automatycznie rozwiązuje go w pełni, aby zidentyfikować, gdzie chcesz zapłacić. Zwróć uwagę, że robi to automatycznie, dlatego nigdy nie piszemy go w pełni samodzielnie.Jak to się dzieje? Spójrzmy tutaj
Tak więc, wykonując powyższe 6 kroków, próbuje rozwiązać, co to jest
branchName
. Dlatego nigdy nie musimy podawać mu w pełni rozwiązanej nazwy branchName.Spójrz tutaj i tutaj .
Przejdź również do swojego
.git
katalogu i zajrzyj doref
folderu.źródło