Git push — użycie

git push <remote> <branch>

Wypycha określoną gałąź do elementu wraz ze wszystkimi wymaganymi zatwierdzeniami i obiektami wewnętrznymi. Powoduje to utworzenie gałęzi lokalnej w repozytorium docelowym. Aby zapobiec nadpisaniu zatwierdzeń, Środowisko Git nie pozwoli na wypychanie, jeżeli przyczyni się do scalenia w repozytorium docelowym bez przyspieszenia.

git push <remote> --force

Działa tak samo jak polecenie powyżej, ale wymusza wypychanie, nawet jeżeli powoduje to scalenie bez przyspieszenia. Nie należy używać flagi --force, nie mając pewności co do podejmowanych działań.

git push <remote> --all

Umożliwia wypychanie wszystkich gałęzi lokalnych do określonego zdalnego repozytorium.

git push <remote> --tags

W przypadku wypychania gałęzi lub użycia opcji --all znaczniki nie są automatycznie wypychane. Flaga --tags umożliwia wysłanie wszystkich znacznikó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 schemacie pokazano, co się dzieje, gdy postęp lokalnego elementu głównego jest większy niż w przypadku elementu głównego repozytorium centralnego, a zmiany są publikowane poprzez wykonanie polecenia git push origin master. Należy zauważyć, że polecenie git push ma zasadniczo ten sam efekt, co polecenie git merge master wewnątrz repozytorium zdalnego.

Wypychanie i synchronizacja Git

Wypychanie do repozytoriów początkowych

Wymuszanie wypychania

Środowisko 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 pobrać gałąź zdalną i scalić ją z lokalną, a następnie ponownie użyć wypychania. Przypomina to konieczność synchronizacji SVN z repozytorium centralnym za pomocą polecenia svn update przed zatwierdzeniem zestawu zmian.

Flaga --force zastępuje to zachowanie i powoduje dopasowanie gałęzi repozytorium zdalnego do lokalnego przez usunięcie zmian na wyższym poziomie, które mogły nastąpić od ostatniego wykonania polecenia pull. Jedynym przypadkiem, w którym konieczne stanie się wymuszenie wypychania, jest sytuacja, w której okaże się, że właśnie udostępnione zatwierdzenia nie były prawidłowe i naprawiono je za pomocą polecenia git commit --amend lub interaktywnej zmiany bazy. Przed użyciem opcji the --force należy jednak mieć całkowitą pewność, że inne osoby nie pobrały tych zatwierdzeń.

Przykłady

Domyślne polecenie git push

W poniższym przykładzie opisano jedną ze standardowych metod publikowania lokalnych udziałów w repozytorium centralnym. Najpierw należy się upewnić, że lokalne repozytorium główne jest aktualne, pobierając kopię repozytorium centralnego i zmieniając bazę najnowszych zmian. Interaktywna zmiana bazy to także dobra możliwość do wyczyszczenia zatwierdzeń przed ich udostępnieniem. Następnie użycie polecenia git push powoduje wysłanie wszystkich zatwierdzeń w lokalnym repozytorium głównym 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ż sprawdziliśmy już, że lokalne repozytorium główne jest aktualne, powinno to spowodować scalenie z przyspieszeniem, a wykonanie polecenia git push nie powinno spowodować żadnych z wymienionych powyżej zgłoszeń bez przyspieszenia.

Zmienione wypychanie wymuszone

# 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ą zatwierdzania. Polecenie git commit --amend umożliwia aktualizację poprzedniego zatwierdzenia. Zmienione zatwierdzenie jest następnie wypychane 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.