Nie jestem mistrzem git, ale pracuję z nim już od jakiegoś czasu przy kilku różnych projektach. W każdym projekcie zawsze git clone [repository]
i od tego momentu zawsze mogę git pull
, o ile oczywiście nie mam wybitnych zmian.
Ostatnio musiałem wrócić do poprzedniej gałęzi i zrobiłem to z git checkout 4f82a29
. Kiedy znów byłem gotowy do ciągnięcia, odkryłem, że musiałem przywrócić gałąź do opanowania. Teraz nie mogę ciągnąć za pomocą prostej, git pull
ale zamiast tego muszę określić git pull origin master
, co jest denerwujące i wskazuje mi, że nie do końca rozumiem, co się dzieje.
Co się zmieniło, co nie pozwala mi zrobić strita git pull
bez podania wzorca początkowego i jak go zmienić z powrotem?
AKTUALIZACJA:
-bash-3.1$ cat config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[branch "master"]
[remote "origin"]
url = [email protected]:user/project.git
fetch = refs/heads/*:refs/remotes/origin/*
AKTUALIZACJA 2: Żeby było jasne, rozumiem, że moja oryginalna metoda mogła być niepoprawna, ale muszę naprawić to repozytorium, aby móc git pull
ponownie użyć . Obecnie git pull powoduje:
-bash-3.1$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.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 ').
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.master.remote =
branch.master.merge =
remote..url =
remote..fetch =
See git-config(1) for details.
Mogę powiedzieć, git pull
która gałąź ma zostać scalona i działa poprawnie, ale git pull
nie działa tak, jak pierwotnie przed moim git checkout
.
źródło
Odpowiedzi:
Poniżej
[branch "master"]
spróbuj dodać następujące elementy do pliku konfiguracyjnego Git repozytorium (.git/config
):To mówi Gitowi 2 rzeczy:
git pull
z gałęzi głównej, bez określenia zdalnego i gałęzi, użyj domyślnego zdalnego (źródła) i scal zmiany w zdalnej gałęzi głównej.Nie jestem jednak pewien, dlaczego ta konfiguracja zostałaby usunięta z twojej konfiguracji. Być może będziesz musiał postępować zgodnie z sugestiami opublikowanymi przez inne osoby, ale może to zadziałać (lub przynajmniej pomóc).
Jeśli nie chcesz ręcznie edytować pliku konfiguracyjnego, możesz zamiast tego użyć narzędzia wiersza polecenia:
źródło
.git/config
).$ git config branch.master.remote origin ; git config branch.master.merge refs/heads/master
.Jeśli wolisz, możesz ustawić te opcje za pomocą wiersza polecenia (zamiast edytować plik konfiguracyjny) w następujący sposób:
Lub, jeśli jesteś podobny do mnie i chcesz, aby był domyślny we wszystkich swoich projektach, w tym nad tymi, nad którymi możesz pracować w przyszłości, dodaj go jako globalne ustawienie konfiguracji:
źródło
.git
w której wydaje się, że git zachowuje kod skrótumaster
bieżącego zatwierdzenia.Spowoduje to dodanie następujących informacji do
config
pliku:Jeśli tak,
branch.autosetuprebase = always
to doda również:źródło
fatal: Not a valid object name: 'origin/master'.
mimo żeorigin
jest prawidłowym pilotem imaster
istnieje, jak zwykle, w obu repozytoriach.git branch --set-upstream-to=origin/master master
.Trudno mi zapamiętać dokładne
git config
lubgit branch
argumenty jak w odpowiedziach mipadi i Casey, więc używam tych 2 poleceń, aby dodać referencję:Spowoduje to dodanie tych samych informacji do Twojego .git / config, ale łatwiej mi je zapamiętać.
źródło
Git pull łączy dwie akcje - pobieranie nowych zatwierdzeń ze zdalnego repozytorium w śledzonych gałęziach, a następnie scalanie ich w bieżącą gałąź .
Po sprawdzeniu konkretnego zatwierdzenia nie masz bieżącej gałęzi, tylko HEAD wskazuje na ostatnie dokonane zatwierdzenie. Nie
git pull
ma więc określonych wszystkich parametrów. Dlatego to nie zadziałało.Na podstawie zaktualizowanych informacji próbujesz cofnąć zdalne repozytorium. Jeśli znasz zatwierdzenie, które wprowadziło błąd, najłatwiejszym sposobem na poradzenie sobie z tym jest
git revert
zapisanie nowego zatwierdzenia, które anuluje określony zatwierdzony błąd:Ponieważ to twój serwer chcesz zmienić, założę, że nie musisz przepisywać historii, aby ukryć zatwierdzone błędy.
Jeśli błąd został wprowadzony w zatwierdzeniu scalania, ta procedura nie będzie działać. Zobacz: Jak przywrócić wadliwe scalenie .
źródło
Istnieje również sposób skonfigurowania Git, aby zawsze pobierał i wypychał równoważną gałąź zdalną do gałęzi aktualnie pobranej do kopii roboczej. Nazywa się to gałęzią śledzenia, która git ready zaleca ustawienie domyślne .
Dla następnego repozytorium powyżej obecnego katalogu roboczego:
Dla wszystkich repozytoriów Git, które nie są skonfigurowane inaczej:
Niby magia, IMHO, ale może to pomóc w przypadkach, gdy konkretna gałąź jest zawsze bieżącą gałęzią .
Po pierwszym
branch.autosetupmerge
ustawieniutrue
i sprawdzeniu oddziału Git powie Ci o śledzeniu odpowiedniego oddziału zdalnego:Następnie Git automatycznie prześle do odpowiedniej gałęzi:
źródło
Nie chcąc edytować mojego pliku konfiguracyjnego git, podążyłem za informacjami w poście @ mipadi i użyłem:
źródło
Twoje natychmiastowe pytanie, jak sprawić, by przyciągnęło mistrza, musisz zrobić, co mówi. Określ refspec, z którego chcesz pobierać w konfiguracji oddziału.
źródło
Chciałem tylko dodać kilka informacji, które możemy sprawdzić, czy
git pull
automatycznie odnosi się do dowolnego oddziału, czy nie.Jeśli uruchomisz polecenie,
git remote show origin
(zakładając, że źródłem jest nazwa zdalna), git wyświetli tę informację, niezależnie od tego, czy istnieje jakieś domyślne odniesieniegit pull
.Poniżej znajduje się przykładowy wynik (pochodzi z dokumentacji git).
Zwróć uwagę na część, w której to pokazuje, gałąź lokalna skonfigurowana dla git pull.
W takim przypadku
git pull
będzie się odnosić dogit pull origin master
Początkowo, jeśli sklonowałeś repozytorium, używając git clone, te rzeczy są automatycznie załatwiane. Ale jeśli dodałeś zdalnie ręcznie za pomocą zdalnego dodawania git, brakuje ich w konfiguracji git. W takim przypadku brakowałby fragmentu, w którym wyświetla się „Lokalna gałąź skonfigurowana dla„ git pull ”:”
git remote show origin
.Kolejne kroki, które należy wykonać, jeśli nie istnieje konfiguracja
git pull
, zostały już wyjaśnione innymi odpowiedziami.źródło