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
.
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:
- gdy jesteś w gałęzi master, domyślnym zdalnym jest origin.
- 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
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
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
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ć.
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 .
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
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
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
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