Najwyraźniej jestem okropny w używaniu gita, pomimo moich najlepszych prób zrozumienia tego.
Z kernel.org dla git push
:
-u
--set-upstream
Do każdej gałęzi, która jest aktualna lub została pomyślnie wysłana, dodaj referencję upstream (śledzenia), używaną przez bez argumentów git-pull (1) i inne polecenia. Aby uzyskać więcej informacji, zobacz
branch.<name>.merge
w git-config (1).
Oto branch.<name>.merge
od git config
:
branch.<name>.merge
Definiuje wraz z
branch.<name>.remote
odgałęzieniem dla danego odgałęzienia. Mówi git fetch / git pull, którą gałąź połączyć, a także może wpływać na git push (patrz push.default). Gdy jest w gałęzi<name>
, mówi git pobrać domyślny plik referencyjny, który ma zostać oznaczony do scalenia w FETCH_HEAD. Wartość jest obsługiwana jak zdalna część refspec i musi być zgodna z ref, która jest pobierana z pilota podanego przez"branch.<name>.remote"
. Informacje o scalaniu są używane przez git pull (który na początku wywołuje git fetch), aby wyszukać domyślną gałąź do scalenia. Bez tej opcji, git pull defaults, aby scalić pierwszy pobrany refspec. Podaj wiele wartości, aby uzyskać scalenie ośmiornicy. Jeśli chcesz skonfigurować git pull, aby łączył się<name>
z innym oddziałem w lokalnym repozytorium, możesz wskazaćbranch.<name>.merge
do żądanej gałęzi i użyj specjalnego ustawienia. (kropka) dlabranch.<name>.remote
.
Z powodzeniem skonfigurowałem zdalne repozytorium za pomocą github i pomyślnie wypuściłem swoje pierwsze zatwierdzenie do niego za pomocą:
git push -u origin master
Następnie nieumyślnie zepchnąłem drugie zatwierdzenie do mojego zdalnego repozytorium, używając:
git commit -m '[...]'
Jednak błędnie myśląc, że muszę ponownie wcisnąć do origin
z master
, wpadłem:
# note: no -u
git push origin master
Co to zrobiło? Wydawało się, że nie miało to żadnego efektu. Czy „cofnąłem” git push -u origin master
?
I'm apparently terrible at using git, despite my best attempts to understand it.
- Nigdy nie miałem kogoś tak dobrze mnie odtwarzającego.Odpowiedzi:
Kluczem jest „git-pull bez argumentów”. Kiedy robisz
git pull
z gałęzi, bez określania źródłowego pilota lub gałęzi, git sprawdzabranch.<name>.merge
ustawienie, aby wiedzieć, skąd pobierać.git push -u
ustawia te informacje dla gałęzi, którą przekazujesz.Aby zobaczyć różnicę, użyjmy nowej pustej gałęzi:
Po pierwsze, pchamy bez
-u
:Teraz jeśli dodamy
-u
:Pamiętaj, że informacje o śledzeniu zostały skonfigurowane tak, aby
git pull
działały zgodnie z oczekiwaniami bez określania pilota lub oddziału.Aktualizacja: Wskazówki dotyczące bonusów:
git pull
tego ustawienia wpływa również na domyślne zachowaniegit push
. Jeśli masz zwyczaj-u
przechwytywania zdalnej gałęzi, którą zamierzasz śledzić, zalecamy ustawieniepush.default
wartości konfiguracji naupstream
.git push -u <remote> HEAD
popchnie bieżącą gałąź do gałęzi o tej samej nazwie na<remote>
(a także skonfiguruje śledzenie, abyś mógł to zrobićgit push
później).źródło
git push <remote> <branch>
sprawia, że wszystko jest jednoznaczne . W przypadku pominięcia zdalnego lub oddziału git wraca do ustawień konfiguracji oddziału, które są dla ciebie ustawionegit push -u
.git push origin test
(którego nie ma-u
). Następnie pokazałeś, żegit push -u origin test
usuwa to dwuznaczność. Czy jest literówka, czy znów jestem gęsty?git push <remote> <branch>
jest jednoznaczny, mam na myśli to, w stosunku dogit push
którego opiera się konfiguracja gałęzi. Podobniegit pull <remote> <branch>
jest jednoznaczny igit pull
polega na konfiguracji oddziału. Po popychany z-u
zarównogit push
igit pull
będzie działać zgodnie z oczekiwaniami.git push
- chyba żepush.default
sam ustalisz ,git push
używa tylko konfiguracji odgałęzienia w górę, aby zdecydować, do którego pilota przesłać, a nie do oddziału zdalnego w celu aktualizacji.git push origin master
to samo dla drugiej strony IE.git pull origin master
.. Więc jeśli załóżmy, że zmiana gałęzi, możeszgit push origin branch_name
to samo zrobić z IE po drugiej stronie.git pull origin branch_name
… jest taki sam jak:
Zrób ostatnie zdanie, jeśli zapomnisz
-u
!Lub możesz to zmusić:
Jeśli pozwolisz, aby polecenie to zrobiło za ciebie, wybierze twoje błędy, tak jakbyś wpisał nieistniejącą gałąź lub nie
git remote add
; chociaż to może być to, czego chcesz. :)źródło
master
to tylko przykład :)git branch master -u origin/master
details @ stackoverflow.com/a/2286030/790359-u
opcji, wpiszgit push -u
natychmiast, będzie OK.--setup-upstream
będą przestarzałe:The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to
git branch --set-upstream-to=origin/master master
Mówiąc prościej:
Technicznie
-u
flaga dodaje odniesienie śledzenia do serwera nadrzędnego, na który naciskasz.Ważne jest tutaj to, że pozwala to zrobić
git pull
bez podawania dodatkowych argumentów. Na przykład, kiedy to zrobiszgit push -u origin master
, możesz później zadzwonić,git pull
a git będzie wiedział, że tak naprawdę miałeś na myśligit pull origin master
.W przeciwnym razie trzeba wpisać całe polecenie.
źródło
-u
flagę przyorgin master
każdym kolejnym ściągnięciu, będzie się do niej odnosił. A jeśli chcę zmienićgit pull
zachowanie, powinienem uruchomić,git push -u origin some_other_branch
agit pull
teraz będę się odnosiłsome_other_branch
? Dziękuję Ci!git push -u origin master
Wszystkie niezbędne polecenia git bash do wypychania i pobierania do Github:
Jeśli chcesz edytować plik:
Aby zobaczyć wszystkie gałęzie i ich zobowiązania:
źródło