git remote repository - ghdrako/doc_snipets GitHub Wiki
Zdalne gałęzie są referencjami (wskaźnikami) na stan gałęzi znajdujący się w zdalnym repozytorium - zakładki przypominające w jakim stanie była gałąź przed ostatnim kontakcie z serwerem. Pomagają zrozumieć różnicę między pracą lokalną a dostępną publicznie.
Zdalne gałęzie mają specjalną właściwość. Kiedy je checkoutujesz, Git wprowadza cię w tryb odłączonego HEADa. Robi to celowo, ponieważ nie możesz pracować bezpośrednio na tych gałęziach; Zdalna gałąź zaktualizuje się tylko przy aktualizacji zdalnego repozytorium.
Zapisujemy w formacie:
(zdalny_serwer)/(gałąź)
<remote name>/<branch name>
origin/master
Origin - nie ma w gicie szczególnego znaczenia - to domyślna nazwa zdalnego serwera nadawana kiedy używamy git clone
git clone <url git repo> # pobieze repozytorium z url-a i zapisze w katalogu w ktorym orginalni jest to repozytorium
git clone <url git repo> <inny katalog> # # pobieze repozytorium z url-a i zapisze w katalogu wskazanym
git remote show # zwroci origin
git remore show origin # zwroci url repozytorium zdalnego
Domysnym branchem lokalnym i zdalnym jest master. Zdalny branch jest sledzony przez lokalny.
git clone -o moj_serwer # domyślna nazwa serwera będzie moj_serwer
git remote show # zwroci moj_serwer
Klonowac mozemy za pomoca sciezki shh lub https. Zeby uzyc ssh trzeba wyge erowac sobie klucz publiczn i prywatny najlepiej bez hasla i umiescic klucz publiczny w zdalnym repozytorium na swoim koncie. Jesli sa nadal problemy i pyta o haslo
export GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=no -i <sciezka do klucz prywatnego>
git clone ...
Do pobierania zmian ze zdalnych repozytoriów służy polecenie git fetch
- aktualizuje stan naszych zdalnych gałęzi.
git fetch wykonuje dwie rzeczy:
- pobiera commity, które są w zdalnym repozytorium, ale których brakuje w naszym lokalnym repozytorium i...
- aktualizuje miejsca, które wskazują nasze zdalne gałęzie (na przykład origin/main)
git fetch zasadniczo synchronizuje lokalną reprezentację zdalnego repozytorium z tym, jak w rzeczywistości zdalne repozytorium wygląda (w danej chwili) natomiast nie zmienia naszych lokalnych gałęzi. Ściąga wszystkie commity i potem możemy je użyć do aktualizacji lokalnych.
Istnieje wiele sposobów, aby to zrobić - kiedy masz już nowe commity dostępne lokalnie, możesz je dołączyć tak, jakby były zwykłymi commitami na innych gałęziach. Oznacza to, że możesz wykonywać polecenia takie jak:
- git cherry-pick o/main
- git rebase o/main
- git merge o/main
git fetch origin foo
Git przejdzie do gałęzi foo w zdalnym repozytorium, weźmie wszystkie commity, których brakuje lokalnie, i zrzuci je nam na lokalną gałąź o/foo.
Za pomocą git pull
można na raz wykonać pobieraniu zdalnych zmian (fetch), a następnie łączenie ich lokalnie (merge)
Przeciwieństwem git pull
jest git push
. Wypycha nasze zmiany na zdalne repozytorium ale tez aktualizuje stan zdalnej galezi lokalnie np origin/main
Zachowanie git push bez argumentów różni się w zależności od jednego z ustawień Git o nazwie push.default. Domyślna wartość tego ustawienia zależy od wersji Git np możne być upstream
Wypchniecie zmian do zdalnego repozytorium moze sie nie udac gdy od ostatniego pobrania git fetch
zaszly w nim zmiany.
W tym przypadku musimy pobrać lokalnie te zmiany i scalic je z naszymi lokalnymi. Mozna to zrobic na 2 sposoby:
- rebase
git fetch
git rebase origin/main
git push
lub w skrócie
git pull --rebase
git push
- merge
git fetch
git merge origin/main
git push
lub w skrocie
git pull
git push
# create new branch locally
git checkout -b <branch-name>
##### push
git push <src_branch>:<dest_branch> # pelna skladnia git push # wersja skrocona gdy <src_branch> jest taki <dest_branch> git push origin master
# push local branch to remote server and create remote branch
git push -u <remote-name> <branch-name>
# or If you want to have a different name for the remote branch than the local one
git push -u <remote-name> <local-branch-name>:<remote-branch-name>
Flags:
-
-u
flag (or--set-upstream
), the local branch will track the remote branch.
# git 2.23+
git fetch
git switch remote_branch_name
# git 1.6.6+
git fetch
git checkout remote_branch_name
These commands will create the branch locally if it doesn't exist already and set the upstream to the remote-tracking branch "origin/remote_branch_name".
Please note that this is different from git checkout remote_name/branch_name
. Using that command would result in a detached HEAD (unnamed branch).
You may, alternatively, also use either set of the following commands (especially when you want to name the local branch differently):
git fetch remote_name
git switch -c local_branch_name --track remote_name/remote_branch_name
git fetch remote_name
git checkout -b local_branch_name --track remote_name/remote_branch_name
# git 2.23+
git fetch remote_name
git switch -c local_branch_name remote_name/remote_branch_name
git fetch remote_name
git checkout -b local_branch_name remote_name/remote_branch_name
Either of the commands mentioned above will create the local branch called "local_branch_name" and set the upstream to the remote-tracking branch "remote_name/remote_branch_name".
If your local branch and remote branch names are the same, then you may use either of the following shortcuts:
# git 2.23+
git fetch remote_name
git switch --track remote_name/remote_branch_name
# git 1.6.1+
git fetch remote_name
git checkout --track remote_name/remote_branch_name
Ustawienie galezi sledzacej o innej nazwie -
- Sposób 1 - checkout nowej gałęzi wykorzystujący zdalną gałąź jako określoną referencję. Polecenie
git checkout -b totallyNotMain origin/main
tworzy nową gałąź o nazwie totallyNotMain i każe jej śledzić o/main.
- Sposób 2 - Inny sposób na ustawienie remote tracking na branchu to po prostu użycie opcji git branch -u. Polecenie
git branch -u o/main foo
spowoduje, że gałąź foo będzie śledzić o/main. Jeśli aktualnie wybraną gałęzią jest foo, to możesz nawet pominąć jej nazwę:
git branch -u o/main
git fetch origin
git remote add moj_serwer2
git fetch moj_serwer2
Before using "git push", make sure the correct local branch is checked out. Then, to perform the push, simply specify which remote branch you want to push to:
git checkout develop
git push origin develop
git push origin moja_galaz
git push origin master
git push <remote> <place>
git push origin main
Przejdź do gałęzi o nazwie "main" w moim repozytorium, weź wszystkie commity, a potem idź do gałęzi "main" na zdalnym repozytorium, które nazywa się "origin". Umieść na tej gałęzi wszystkie commity, których tam jeszcze nie ma, i daj znać, jak skończysz.
Wpisując main w miejscu argumentu "place" (miejsce), powiedzieliśmy Gitowi, skąd ma wziąć commity i gdzie je umieścić. To w zasadzie właśnie "miejsce", czyli "lokalizacja" do zsynchronizowania na obu repozytoriach.
Pamiętaj, że skoro powiedzieliśmy Gitowi wszystko, co musi wiedzieć (podając oba argumenty), będzie kompletnie ignorować, jakie miejsce mamy aktualnie wybrane!
By określić zarówno źródło, jak i cel dla , po prostu połącz je dwukropkiem:
git push origin <source>:<destination>
git push origin foo:bar # wypychanie zmian z lokalnej galezi foo do zdalnej bar
git push origin foo^:main # wypchniecie rodzica foo do zdalnego jako main
To nic innego jak refspec z dwukropkiem. Refspec to tylko wymyślny termin oznaczający lokalizację, którą Git potrafi zidentyfikować (na przykład gałąź foo albo po prostu HEAD~1).
Use option -u
to makes sure that a tracking connection between the local and the newly created remote branch is established
git push -u origin master
After having set up such a tracking connection, you can perform future pushes without providing additional options - since the tracking connection provides default values for the push command:
git push
git checkout -b moj_branch origin/moj_branch
git clone <url>
cd <repo>
git remote # jeśli repo zostało sklonowane to zwróci **origin** ponieważ Git domyślnie w ten sposób nazywa wszystkie klonowane repozytoria
git remote -v # zwróci dodatkowo adresy URL dla repozytoriów zdalnych. Każde ma domyślnie 2 adresy dla odczytu i zapisu
Pobranie lokalnej gałęzi na bazie zdalnej automatycznie uruchamia mechanizm nazywany * gałęzią śledząca* tracking branch.
Gałęzią śledząca nazywamy taka gałąź lokalna która ma bezpośrednie powiązanie z gałęzią zdalna. Samo polecenie git push
powoduje wypchniecie zmian a Git bedzie wiedział o jaki serwer i jaka gałąź chodzi. Tak samo git pull
Po sklonowaniu repo Git automatycznie tworzy gałąź master która śledzi zdalną gałąź origin/master. Dlatego polecenia git push
i git pull
mogą działać na niej bez dodatkowych parametrów.
git checkout -b [branch] [remote_server]/[branch]
Istnieje specjalny skrót --track
git checkout --track [remote_server]/[branch]
git checkout --track origin/serverfix
Nazwa lokalna brancha możne różnic się od nazwy zdalnego:
git checkout -b sp origin/server_patch # branch sp automatycznie wypycha do origin/server_patch
Można istniejąca lokalna gałąź powiązać ze zdalna opcja -u
lub --set-upstream-to
git branch --set-upstream-to origin/my_branch my_local_branch
git branch --set-upstream-to origin/my_branch
git branch -u origin/my_branch # lokalny aktywny branch zostaje powiazany z origin/my_branch
git branch -vv # stan na moment poprzedniego pobrania
git fetch all
git branch -vv # biezacy stan
git push origin --delete server_patch
git remote # zwraca origin
git remote add pb <url> # dodanie repo Paula
git remote -v # zwroci origin i pb z url-ami pb
git fetch pb # pobranie repo Paula lokalnie
# Od teraz galaz master z repozytorium Paula bedzie dostepna lokalnie pod nazwa pb/master
git fetch [nazwa-zdalna]
# Jesli sklonujem repozytorium to automatycznie przydzielona mu jest nazwa origin
git fetch origin # pobranie zmian ze sklonowanego repozytorium ktore na nim zaszly od czasu klonowania lub poprzedniego fetcha - nie jest wykonywane automatyczne zlaczenie
# Jesli jakas galez lokalna zostala skonfigurowana tak ze sledzi zdalan galaz za pomoca git pull mozna pobrac zmiany i zlaczyc z lokalna galezia
git push [nazwa-servera] [nazwa-galezi-zdalnej]
# Jeśli chcesz wypchnąć swoja galaz master do serwera o nazwie origin:
git push origin master
# polecenie zadziała jeśli repozytorium zdalne nie było zmieniane od czasu klonowania lub fetch-a/pull-a
git remote show [nazwa serwera]
git remote show origin # wyświetla które zdalne rep są śledzone które lokalne branche są powiązane ze zdalnymi przy git pull/push, których już nie ma w zdalnych i jakie są nowe branche których nie masz lokalnie
git remote rename # pozwala ustawić nowa nazwę zdalnego serwera
git remote rename pb paul # zmiana z pb na paul
git remote
git remote rm paul # usuniecie z repo informacji o zdalnym repozytorium
git remote
If you're already on the branch (on your local) that you want to rename (along with its corresponding remote branch), then you can do the following:
# rename the branch
git branch -m new-name
# delete the old remote branch and push the new local branch
git push origin :old-name new-name
# switch to the new branch
git checkout new-name
# reset the upstream for the new local branch
git push origin -u new-name
If you're not already on the branch you wish to rename, then you just need to add the local branch name to the first command like so:
git branch -m old-name new-name
Rest of the commands should work in either case.