Jak sprawić, by git zawsze wyciągał z konkretnej gałęzi?

Nie jestem mistrzem Gita, 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 byłem ponownie gotowy do ciągnięcia, odkryłem, że muszę ustawić swoją gałąź z powrotem do mistrza. Teraz nie mogę ciągnąć za pomocą strita git pull, ale zamiast tego muszę określić git pull origin master, który jest irytujące i wskazuje mi, że nie do końca rozumiem, co się dzieje.

Co się zmieniło, co nie pozwala mi zrobić prostej git pull bez podania origin master i jak to zmienić?

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/*

UPDATE 2: aby było jasne, rozumiem, że moja oryginalna metoda mogła być niepoprawna, ale muszę naprawić ten repo, abym mógł po prostu użyć git pull ponownie. Obecnie git pull daje:

-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óry oddział do połącz i działa poprawnie, ale git pull nie działa tak jak pierwotnie przed moim git checkout.

Author: David Smith, 2009-03-18

8 answers

Pod [branch "master"], spróbuj dodać następujące elementy do pliku konfiguracyjnego Git repo (.git/config):

[branch "master"]
    remote = origin
    merge = refs/heads/master

To mówi Git 2 rzeczy:

  1. gdy jesteś w gałęzi master, domyślnym zdalnym jest origin.
  2. podczas używania git pull na gałęzi master, bez podanego remote i branch, Użyj domyślnego remote (origin) i scal zmiany ze zdalnej gałęzi master.

Nie jestem jednak pewien, dlaczego ta konfiguracja została usunięta z twojej konfiguracji. Możesz mieć podążać za sugestiami zamieszczonymi przez inne osoby, ale może to zadziałać (lub przynajmniej pomóc).

Jeśli nie chcesz ręcznie edytować pliku konfiguracyjnego, możesz użyć narzędzia wiersza poleceń:

$ git config branch.master.remote origin
$ git config branch.master.merge refs/heads/master
 717
Author: mipadi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-19 06:39:21

Jeśli wolisz, możesz ustawić te opcje za pomocą linii commmand (zamiast edytować plik konfiguracyjny) w następujący sposób:

  $ git config branch.master.remote origin
  $ git config branch.master.merge refs/heads/master

Lub, jeśli jesteś taki jak ja i chcesz, aby było to domyślne dla wszystkich twoich projektów, w tym tych, nad którymi możesz pracować w przyszłości, dodaj je jako globalne ustawienie konfiguracji:

  $ git config --global branch.master.remote origin
  $ git config --global branch.master.merge refs/heads/master
 139
Author: Head,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-22 00:36:25
git branch --set-upstream master origin/master

To doda następujące informacje do pliku config:

[branch "master"]
    remote = origin
    merge = refs/heads/master

Jeśli masz branch.autosetuprebase = always to doda również:

    rebase = true
 79
Author: cmcginty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-11 04:33:57

Trudno mi zapamiętać dokładne argumenty git config lub git branch jak w odpowiedziach Mipadi i Casey, więc używam tych 2 poleceń, aby dodać odwołanie do źródła:

git pull origin master
git push -u origin master

To doda te same informacje do twojego .git / config, ale łatwiej mi to zapamiętać.

 47
Author: Luke Sampson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-15 00:11:47

Git pull łączy dwie akcje-pobieranie nowych commitów ze zdalnego repozytorium w śledzonych gałęziach, a następnie scalanie ich do bieżącej gałęzi .

Kiedy sprawdzasz konkretny commit, nie masz bieżącej gałęzi, masz tylko głowę wskazującą na ostatni commit, który zrobiłeś. Więc git pull nie ma podanych wszystkich parametrów. Dlatego nie zadziałało.

Bazując na zaktualizowanych informacjach, próbujesz przywrócić pilota repo. Jeśli znasz commit, który wprowadził błąd, najprostszym sposobem na rozwiązanie tego problemu jest git revert, która rejestruje nowy commit, który wycofuje określony błędny commit:

$ git checkout master
$ git reflog            #to find the SHA1 of buggy commit, say  b12345
$ git revert b12345
$ git pull
$ git push

Ponieważ to twój serwer chcesz zmienić, zakładam, że nie musisz przepisywać historii, aby ukryć błędny commit.

Jeśli błąd został wprowadzony w commicie scalającym, to ta procedura nie będzie działać. Zobacz Jak-przywrócić-wadliwe-scalanie .

 23
Author: Paul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-18 18:36:49

Nie chcąc edytować mojego pliku konfiguracyjnego git śledziłem info w poście @mipadi i użyłem:

$ git pull origin master
 10
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-03 00:56:24

Istnieje również sposób na skonfigurowanie Gita tak, że zawsze ściąga i wypycha równoważną zdalną gałąź do gałęzi aktualnie sprawdzonej do kopii roboczej. To się nazywa gałąź śledzenia, która git ready zaleca ustawienie domyślne.

Dla następnego repozytorium nad bieżącym katalogiem roboczym:

git config branch.autosetupmerge true

Dla wszystkich repozytoriów Git, które nie są skonfigurowane w inny sposób:

git config --global branch.autosetupmerge true
[[6]] trochę magii, IMHO, ale to może pomóc w przypadkach, gdy konkretna gałąź to zawsze bieżąca gałąź .

Kiedy masz branch.autosetupmerge ustawione na true i wypisujesz gałąź po raz pierwszy, Git powie Ci o śledzeniu odpowiedniej gałęzi zdalnej:

(master)$ git checkout gh-pages
Branch gh-pages set up to track remote branch gh-pages from origin.
Switched to a new branch 'gh-pages'

Git automatycznie wypchnie do odpowiedniej gałęzi:

(gh-pages)$ git push
Counting objects: 8, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 1003 bytes, done.
Total 6 (delta 2), reused 0 (delta 0)
To [email protected]:bigben87/webbit.git
   1bf578c..268fb60  gh-pages -> gh-pages
 8
Author: Bengt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-19 22:54:12

Twoje natychmiastowe pytanie, Jak sprawić, by ciągnął mistrza, musisz zrobić to, co mówi. Określ refspec, z którego chcesz pobierać w konfiguracji gałęzi.

[branch "master"]
    merge = refs/heads/master
 4
Author: Ryan Graham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-14 18:17:06