Czasami gałąź QA (lub staging) tak bardzo obrosła eksperymentami, że łatwiej jest nie próbować rozwiązywać wszystkich konfliktów, a po prostu zrobić z niej dokładną kopię main (master).
Aby to zrobić, wystarczą dwie komendy:
git reset --hard origin/main
git push --force-with-lease
Przykład:
git reset --hard origin/main
HEAD jest teraz na 46911f2 Naprawiono wyszukiwanie na stronie głównej
git push --force-with-lease
Łącznie 0 (delta 0), ponownie użyto 0 (delta 0), ponownie użyto pakietu 0 (z 0)
Do https://github.com/username/sandbox.git
+ 53cda29...46911f2 staging -> staging (wymuszone aktualizowanie)
Co się dzieje:
- git reset --hard origin/main całkowicie przenosi bieżącą lokalną gałąź do tego samego commita, co origin/main. Wszystkie lokalne commity i niezapisane zmiany zostaną utracone.
- git push --force-with-lease aktualizuje zdalną gałąź QA/Staging, czyniąc ją dokładną kopią main.
Czemu --force-with-lease, a nie --force?
Bo ta komenda jest trochę bezpieczniejsza. Git sprawdza, czy nikt nie zdążył wypchnąć nowych commitów po twoim ostatnim fetch. Jeśli zdalna gałąź się zmieniła, push zostanie odrzucony zamiast cicho nadpisać czyjąś pracę.
⚠️ Rób to tylko wtedy, gdy naprawdę chcesz całkowicie nadpisać historię gałęzi QA/Staging. Po takim pushu wszystkie commity, których nie ma w main, przestaną być częścią tej gałęzi.
Aplikacje GUI typu Github Desktop mogą nie wyświetlić tych zmian. Może być konieczne ponowne uruchomienie aplikacji lub "przeskakiwanie" między gałęziami, aby zmiany się załadowały.