Close

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
Okno konsoli
materiały pokrewne

Zaawansowany dziennik Git

Logo Bitbucket
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.

Używanie polecenia git push do publikowania zmian

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.

Ludzie współpracujący przy ścianie pełnej narzędzi

Blog Bitbucket

Ilustracja DevOps

Ścieżka szkoleniowa DevOps

Demonstracje funkcji z ekspertami Atlassian

Zobacz, jak Bitbucket Cloud współpracuje z Atlassian Open DevOps

Zapisz się do newslettera DevOps

Thank you for signing up