Git - push i pull (pchnij i ściągnij)
Stronę tą wyświetlono już: 857 razy
Tak, tak drogie żuczki i inne stworzenia Boże. Czas na poważną wszakże rozmowę. O pchaniu i ściąganiu informacji do/z repozytorium na GitHub-ie. Tylko żadnych mi kosmatych myśli! To poważny temat dla poważnych ludzi!
To pchnijmy projekt w świetlaną przyszłość dodając nowego branch-a:
git checkout -b someNewBranch Switched to a new branch 'someNewBranch'
i oczywiście dodając jakiś plik tekstowy np. someNewStuff.txt a następnie dodając i commit-ując:
git add someNewStuff.txt git commit -m "add someNewStuff.txt" [someNewBranch ec70df2] add someNewStuff.txt 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 someNewStuff.txt
Teraz z najdzikszą rozkoszą można się oddać procederowi pchnięcia nowego branch-a do repozytorium:
git push fatal: The current branch someNewBranch has no upstream branch. To push the current branch and set the remote as upstream, use git push --set-upstream origin someNewBranch
Ale cóż to? Git zapłakał rzewnymi łzami! Ale spokojna twoja rozczochrana! Albowiem git mądre gacie podpowiada co trzeba zrobić, a nawet i trochę wyjaśnia dlaczego. Oto i rozwiązanie problemu:
git push --set-upstream origin someNewBranch Enumerating objects: 6, done. Counting objects: 100% (6/6), done. Delta compression using up to 8 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (6/6), 531 bytes | 531.00 KiB/s, done. Total 6 (delta 0), reused 0 (delta 0) remote: This repository moved. Please use the new location: remote: https://github.com/<user name>/<repo name>.git remote: remote: Create a pull request for 'someNewBranch' on GitHub by visiting: remote: https://github.com/<user name>/<repo name>/pull/new/someNewBranch remote: To https://github.com/<user name>/<repo name>.git * [new branch] someNewBranch -> someNewBranch Branch 'someNewBranch' set up to track remote branch 'someNewBranch' from 'origin'.
W tej chwili zapewne na twe usta spragnione odpowiedzi ciśnie się pytanie: Ale jak to? A no tak to, że istnieją trzy typy branch-y:
- lokalne - takie, które znajdują się na lokalnej maszynie;
- zdalne - takie, które znajdują się w repozytorium;
- kopie zdalnych - czyli kopie tego co jest w repozytorium. Te właśnie wiążą zdalne z lokalnymi.
Listę lokalnych nożna wyświetlić w następujący sposób:
git branch
master
* someNewBranch
Natomiast listę wszystkich:
git branch -a master * someNewBranch remotes/origin/master remotes/origin/someNewBranch
Nie muszę chyba tłumaczyć, że ci w komunistycznych kolorach to kopie zdalnych, które nie zawsze są aktualne.
Teraz niezwłocznie przełączę się na branch-a:
git checkout master Switched to branch 'master' Your branch is up to date with 'origin/master'.
by po chwili (lub co najwyżej dwóch) spróbować ściągnąć zmiany do mastera w następujący przebiegły sposób:
git pull origin someNewBranch From https://github.com/<user name>/<repo name> * branch someNewBranch -> FETCH_HEAD Updating 992f8ae..c1622e9 Fast-forward someNewStuff.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 someNewStuff.txt
I znów, to samo pytanie po raz drugi z rzędu: Ale jak to?! Okazuje się bowiem, że operacja pull pozwala ściągnąć zmiany z wskazanego branch-a i merge-ować je!
Gdyby tak się zdarzyło, że w trakcie twojej pracy na tym samym branch-u ktoś dokonał modyfikacji to możliwe jest ściągnięcie ich do lokalnego branch-a w następujący sposób:
git pull