git push
Polecenie git push
służy do przekazywania zawartości repozytorium lokalnego do zdalnego repozytorium. Wypychanie umożliwia przesłanie commitów z repozytorium lokalnego do zdalnego. Jest to odpowiednik polecenia git fetch, ale pobieranie importuje commity do gałęzi lokalnych, a wypychanie eksportuje commity do gałęzi zdalnych. Do konfiguracji gałęzi zdalnych służy polecenie git remote. Wypychanie może potencjalnie spowodować nadpisanie zmian, dlatego podczas tego procesu należy zachować ostrożność. Te kwestie opisano poniżej.
Git push — użycie
git push <remote> <branch>
Wypycha określoną gałąź wraz ze wszystkimi wymaganymi commitami i obiektami wewnętrznymi. Powoduje to utworzenie gałęzi lokalnej w repozytorium docelowym. Aby zapobiec nadpisaniu commitów, środowisko Git nie pozwoli na wypychanie, jeżeli przyczyni się do scalenia w repozytorium docelowym innego niż fast-forward.
git push <remote> --force
Działa tak samo jak polecenie powyżej, ale wymusza wypychanie, nawet jeżeli powoduje to scalenie bez przewijania. Nie należy używać flagi --force
, nie mając pewności co do podejmowanych działań.
Umożliwia wypychanie wszystkich gałęzi lokalnych do określonego zdalnego repozytorium.
git push <remote> --tags
materiały pokrewne
Zaawansowany dziennik Git
POZNAJ ROZWIĄZANIE
Poznaj środowisko Git z rozwiązaniem Bitbucket Cloud
W przypadku wypychania gałęzi lub użycia opcji --all
tagi nie są wypychane automatycznie. Flaga --tags
umożliwia wysłanie wszystkich tagów lokalnych do repozytorium zdalnego.
Git push — dyskusja
Polecenie git push
jest najczęściej używane do publikowania i przekazywania zmian lokalnych do repozytorium centralnego. Po zmodyfikowaniu repozytorium lokalnego wykonywane jest wypychanie w celu udostępnienia modyfikacji członkom zespołu zdalnego.
Na powyższym diagramie pokazano, co się dzieje, gdy postęp lokalnej gałęzi głównej
jest większy niż postęp gałęzi głównej
repozytorium centralnego, a zmiany są publikowane poprzez wykonanie polecenia git push origin main
. Należy zauważyć, że polecenie git push
daje zasadniczo taki sam rezultat jak polecenie git merge main
wykonane z poziomu repozytorium zdalnego.
Wypychanie i synchronizacja Git
Polecenie git push
to jeden z wielu komponentów używanych w całym procesie „synchronizacji” systemu Git. Polecenia synchronizacji działają na gałęziach zdalnych skonfigurowanych za pomocą polecenia git remote. Polecenie git push
można uznać za polecenie „przekazywania”, natomiast polecenia git fetch i git pull, za polecenia „pobierania”. Po przeniesieniu zestawów zmian za pomocą funkcji pobierania lub przekazywania można użyć polecenia git merge w miejscu docelowym w celu integracji zmian.
Wypychanie do repozytoriów początkowych
Często spotykaną współczesną praktyką Git jest posiadanie zdalnie hostowanego repozytorium --bare
, które pełni funkcję centralnego repozytorium źródłowego. To repozytorium źródłowe jest często hostowane poza siedzibą u zaufanej firmy zewnętrznej, na przykład Bitbucket. Ponieważ wypychanie wpływa na strukturę gałęzi zdalnych, najbezpieczniejszym i najczęściej stosowanym rozwiązaniem jest wypychanie do repozytoriów utworzonych z flagą --bare
. Repozytoria surowe (bare) nie mają katalogu roboczego, dlatego wypychanie nie zmieni zawartości katalogu roboczego, nad którą trwają prace. Więcej informacji na temat tworzenia repozytorium surowego zawiera opis polecenia git init.
Wymuszanie wypychania
Git zapobiega nadpisaniu historii w repozytorium centralnym, odrzucając żądania wypychania, gdy powodują scalanie bez przyspieszenia. Jeżeli więc historia zdalna różni się od lokalnej, należy ściągnąć gałąź zdalną i scalić ją z lokalną, a następnie ponownie spróbować wypychania. Przypomina to konieczność synchronizacji SVN z repozytorium centralnym za pomocą polecenia svn update
przed zatwierdzeniem zestawu zmian.
Flaga --force
unieważnia to zachowanie i powoduje dopasowanie gałęzi repozytorium zdalnego do lokalnego przez usunięcie zmian nadrzędnych, które mogły nastąpić od ostatniego ściągania. Jedynym przypadkiem, w którym konieczne stanie się wymuszenie wypychania, jest sytuacja, w której okaże się, że właśnie udostępnione commity nie były całkiem prawidłowe i naprawiono je za pomocą polecenia git commit --amend
lub interaktywnej zmiany bazy. Przed użyciem opcji the --force
należy jednak upewnić się całkowicie, że inne osoby nie ściągnęły tych commitów.
Przykłady
Domyślne polecenie git push
W poniższym przykładzie opisano jedną ze standardowych metod publikowania lokalnych wyników prac w repozytorium centralnym. Najpierw należy się upewnić, że lokalna gałąź główna jest aktualna, pobierając kopię repozytorium centralnego i przeprowadzając operację zmiany bazy w celu uwzględnienia najnowszych zmian. Interaktywna zmiana bazy to także dobra możliwość do wyczyszczenia commitów przed ich udostępnieniem. Następnie użycie polecenia git push
powoduje wysłanie wszystkich commitów z lokalnej gałęzi głównej do repozytorium centralnego.
git checkout main
git fetch origin main
git rebase -i origin/main
# Squash commits, fix up commit messages etc.
git push origin main
Ponieważ upewniliśmy się już, że lokalna gałąź główna jest aktualna, powinno to spowodować scalenie z przewinięciem, a polecenie git push
nie powinno zgłosić żadnego z omówionych powyżej problemów uniemożliwiających scalenie z przewijaniem.
Zmienione wypychanie wymuszone
Polecenia git commit można użyć z opcją --amend
, co spowoduje aktualizację poprzedniego commita. Commit jest często poprawiany w celu aktualizacji komunikatu dotyczącego commita lub dodania nowych zmian. Po poprawieniu commita wykonanie polecenia git push
nie powiedzie się, ponieważ w Git poprawiony commit oraz zdalny commit będą interpretowane jako różniąca się zawartość. W celu wypchnięcia poprawionego commita należy użyć opcji --force
.
# make changes to a repo and git add
git commit --amend
# update the existing commit message
git push --force origin main
Powyższy przykład zakłada wykonanie polecenia w istniejącym repozytorium z historią commitów. Polecenie git commit --amend
umożliwia aktualizację poprzedniego commita. Poprawiony commit jest następnie wypychany z wymuszeniem za pomocą opcji --force
.
Usuwanie gałęzi zdalnej lub znacznika
Czasami gałęzie wymagają oczyszczenia ze względów księgowych lub organizacyjnych. Aby całkowicie usunąć gałąź, należy usunąć ją lokalnie oraz zdalnie.
git branch -D branch_name
git push origin :branch_name
Powyższe polecenie spowoduje usunięcie gałęzi zdalnej o nazwie branch_name. Przekazanie nazwy gałęzi poprzedzonej dwukropkiem do polecenia git push
spowoduje usunięcie gałęzi zdalnej.
Udostępnij ten artykuł
Następny temat
Zalecane lektury
Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat rodzajów zespołów DevOps lub otrzymywać aktualności na temat metodyki DevOps w Atlassian.