Przejdź do treści

Jak cofnąć commit i odzyskać zmiany w Git: 10 komend ratunkowych

Cofnij commit i odzyskaj zmiany bez nadpisania pracy. Bezpieczne scenariusze dla restore, stash, reflog, reset, revert, bisect, rebase i clean.

Maciej Sala

Founder StriveLab

11 min czytaniaOpublikowano 18 grudnia 2025 (Aktualizacja 1 sierpnia 2026)

Ten artykuł nie jest listą egzotycznych flag do zapamiętania, lecz praktycznym zestawem komend Git, które warto znać, gdy repozytorium przestaje zachowywać się jak spokojna sekwencja pull → commit → push.

Zanim użyjesz komendy ratunkowej: cztery warstwy Git

Słowo „cofnąć” jest nieprecyzyjne. Ta sama zmiana może znajdować się w czterech miejscach, a pomylenie ich jest częstą przyczyną utraty danych:

WarstwaCo zawieraBezpieczny pierwszy krok
commit wskazywany przez branchhistoria zapisana jako obiekty Gitgit log --oneline --decorate -n 10
staging area, czyli indexzmiany przygotowane do następnego commitagit diff --staged
working treezmiany w śledzonych plikach poza stagingiemgit diff
pliki untracked lub ignoredpliki, których commit może w ogóle nie obejmowaćgit status --short --ignored

Zacznij od git status, a przed operacją zmieniającą historię utwórz referencję do obecnego commita:

Code
git status
git branch rescue-before-fix HEAD

Taki branch chroni aktualny commit, ale nie zapisuje zmian roboczych ani plików nieśledzonych. Jeżeli to one są najcenniejsze, nie uruchamiaj reset --hard, restore, clean ani git gc. Najpierw zrób kopię katalogu poza repozytorium lub bezpieczny commit ratunkowy na osobnym branchu. Sprawdź, czy kopia obejmuje także pliki ukryte i ignorowane.

1. git stash: tymczasowy schowek na zmiany

git stash push zapisuje stan śledzonych plików w osobnym wpisie i cofa te zmiany w katalogu roboczym. Domyślnie nie obejmuje plików nieśledzonych ani ignorowanych, dlatego czysty wynik zależy od użytych flag. To przydatna opcja, gdy musisz szybko przełączyć branch lub zrobić hotfix bez mieszania go z aktualną pracą.

Code
# Schowaj zmiany w śledzonych plikach
git stash
 
# Schowaj także nowe, nieśledzone pliki
git stash push -u
 
# Schowaj także pliki ignorowane — używaj ostrożnie
git stash push -a
 
# Schowaj zmiany z opisem
git stash push -m "Work in progress: navbar"
 
# Zobacz listę stashy
git stash list
 
# Sprawdź pełny patch przed przywróceniem
git stash show -p --include-untracked stash@{0}
 
# Przywróć ostatni stash i usuń go ze stosu
git stash pop
 
# Przywróć stash bez usuwania go ze stosu
git stash apply
 
# Przywróć konkretny stash
git stash apply stash@{1}
 
# Odtwórz pracę na branchu zaczynającym się w pierwotnym punkcie
git stash branch recovered-wip stash@{0}

Jeżeli chcesz odłożyć tylko wybrane pliki, podaj ścieżkę na końcu:

Code
git stash push -m "Tylko formularz kontaktowy" -- src/components/ContactForm.tsx

Jeśli git stash pop zakończy się konfliktem, wpis pozostaje na liście. Rozwiąż konflikt i usuń go ręcznie dopiero po sprawdzeniu rezultatu. git stash branch bywa bezpieczniejszy, gdy stash powstał dawno temu i aktualny branch znacznie się zmienił.

stash jest wygodny, ale łatwo zamienić go w mały śmietnik. Jeśli praca ma potrwać dłużej niż kilka godzin, zwykle lepszy będzie mały commit roboczy na osobnym branchu, najlepiej wypchnięty do prywatnego brancha zdalnego.

2. git cherry-pick: jak przenieść konkretny commit?

git cherry-pick kopiuje zmianę z wybranego commita na aktualny branch i nie przenosi całej historii brancha, ale tworzy nowy commit z tym samym diffem.

Code
# Znajdź hash commita na branchu źródłowym
git log --oneline feature-branch
 
# Przełącz się na branch docelowy
git switch main
 
# Przenieś jeden commit
git cherry-pick abc1234
 
# Przenieś kilka commitów
git cherry-pick abc1234 def5678
 
# Nałóż zmianę bez automatycznego commita
git cherry-pick --no-commit abc1234

Gdy pojawi się konflikt, Git zatrzyma operację i poczeka na decyzję:

Code
git cherry-pick abc1234
 
# Rozwiąż konflikty w plikach
git add <resolved-files>
git cherry-pick --continue
 
# Albo wycofaj całą operację
git cherry-pick --abort

cherry-pick najlepiej działa dla małych, niezależnych commitów: poprawki buga, drobnej zmiany konfiguracyjnej, jednego refaktoru. Jeśli przenosisz w ten sposób połowę brancha, prawdopodobnie lepszy będzie merge albo rebase.

3. git reflog: jak odzyskać zgubiony commit?

Wskaźnik zmienia się przy commitach, resetach, przełączeniach branchy i rebase. git reflog zapisuje te ruchy lokalnie, dlatego często pozwala odzyskać commity, które zniknęły z normalnego git log.

Code
git reflog
 
# Przykładowy wynik:
# abc1234 HEAD@{0}: commit: Popraw walidację formularza
# def5678 HEAD@{1}: reset: moving to HEAD~3
# 91ab2cd HEAD@{2}: checkout: moving from main to feature/login

Typowy scenariusz: robisz reset --hard, orientujesz się, że to był błąd, a potem szukasz poprzedniego stanu w reflogu.

Code
# Błędna operacja
git reset --hard HEAD~3
 
# Szukasz utraconego commita
git reflog
 
# Bezpieczniej najpierw utworzyć branch ratunkowy
git switch -c recovered-work def5678

Reflog zapisuje ruchy referencji, a nie każdą wersję pliku. Może odzyskać commit sprzed reset --hard, ale nie gwarantuje odzyskania niezacommitowanej pracy nadpisanej w working tree. W takim przypadku sprawdź lokalną historię IDE, snapshoty systemu plików i backupy; kolejne operacje zapisu mogą zmniejszać szanse narzędzi odzyskujących dane.

Reflog pomaga też przy usuniętym branchu:

Code
git branch -D feature-important
 
git reflog
 
# Po znalezieniu ostatniego commita brancha:
git switch -c feature-important abc1234

4. git reset i git revert: dwa sposoby cofania commita

git reset przesuwa aktualny branch na inny commit i w zależności od trybu może zostawić zmiany w staging area, w working directory albo usunąć je z plików roboczych.

Code
git reset --soft HEAD~1
git reset --mixed HEAD~1
git reset --hard HEAD~1

Najprostsze rozróżnienie wygląda tak:

KomendaCo robiKiedy używać
git reset --softcofa commit, zostawia zmiany w staging areagdy chcesz poprawić ostatni commit
git reset --mixedcofa commit, zostawia zmiany w working directorygdy chcesz ponownie ułożyć staging
git reset --hardustawia branch, index i pliki zgodnie z celemtylko po zabezpieczeniu lokalnej pracy
git revert <hash>dodaje nowy commit cofający wcześniejszą zmianęgdy historia jest współdzielona

git revert nie przepisuje historii. Dodaje nowy commit, który odwraca konkretną zmianę:

Code
git revert abc1234

reset --hard nie ogranicza się do „cofniętego commita”: nadpisuje także inne lokalne zmiany w śledzonych plikach, a kolidujące pliki nieśledzone mogą zostać usunięte. Przed jego użyciem sprawdź wszystkie cztery warstwy i utwórz kopię. Jeżeli chcesz tylko usunąć plik ze staging area, użyj git restore --staged -- plik; jeżeli chcesz porzucić jego zmiany robocze, użyj git restore --worktree -- plik dopiero po obejrzeniu git diff.

Historię lokalną możesz sprzątać agresywnie, ale już historię współdzieloną traktuj jak kontrakt z innymi osobami pracującymi na repozytorium.

praktyka pracy zespołowej

Jeśli chcesz cofnąć zmianę, która trafiła już na branch używany przez zespół albo , zacznij od revert. O pracy z automatyzacją po stronie repozytorium więcej piszę w artykule o CI/CD dla Next.js.

5. git bisect: znajdź commit, który zepsuł projekt

git bisect prowadzi Cię przez historię metodą wyszukiwania binarnego. Zamiast ręcznie sprawdzać 40 commitów po kolei, oznaczasz znany dobry i znany zły punkt, a Git sam wybiera kolejne commity do testowania.

Code
git bisect start
git bisect bad
git bisect good abc1234
 
# Git przełączy repozytorium na commit w środku zakresu.
# Testujesz aplikację i oznaczasz wynik:
git bisect good
# albo:
git bisect bad
 
# Po znalezieniu winnego commita wracasz do normalnej pracy:
git bisect reset

Jeśli masz test, który jednoznacznie wykrywa problem, możesz zautomatyzować proces:

Code
git bisect start HEAD abc1234
git bisect run npm test

Komenda uruchamiana przez git bisect run musi zwracać 0 dla commita dobrego, kod 1–127 z wyjątkiem 125 dla złego oraz 125, jeśli rewizji nie da się przetestować i należy ją pominąć. Pozostałe kody przerywają bisect. Test powinien być deterministyczny; niestabilny test albo błąd instalacji zależności może wskazać fałszywego winowajcę.

6. git rebase -i: uporządkuj lokalną historię

Interaktywny rebase pozwala zmieniać kolejność commitów, poprawiać opisy, łączyć małe commity i usuwać niepotrzebne zmiany przed review.

Code
git rebase -i HEAD~3

Git otworzy edytor z listą commitów:

Code
pick abc1234 Add login form
pick def5678 Fix typo
pick ghi9012 Add validation
 
# pick = użyj commit
# reword = zmień opis commita
# squash = połącz z poprzednim i edytuj opis
# fixup = połącz z poprzednim i odrzuć opis
# drop = usuń commit

Typowe sprzątanie wygląda tak:

Code
pick abc1234 Add login form
fixup def5678 Fix typo
squash ghi9012 Add validation

Interaktywny rebase ma największy sens przed wypchnięciem brancha albo przed otwarciem pull requesta. Gdy commit jest już używany przez inne osoby, rebase zaczyna generować koszt synchronizacji.

7. git log: szukanie w historii z precyzją

git log jest bardziej elastyczny niż prosta lista commitów, ponieważ pozwala zawężać historię po autorze, czasie, pliku, opisie albo nawet po fragmencie kodu.

Code
git log --oneline --graph --decorate --all
git log --author="Jan"
git log --since="1 week ago"
git log -- path/to/file.ts
git log --grep="fix validation"
git log -S "validateEmail"
git log -G "validate[A-Za-z]+"
git log -p
git log --stat

Najbardziej praktyczne warianty:

  • git log --graph --decorate --oneline --all pokazuje rozjazd branchy w czytelnej formie.
  • git log -- path/to/file.ts zawęża historię do jednego pliku.
  • git log -S "nazwaFunkcji" szuka commitów zmieniających liczbę wystąpień dokładnego tekstu.
  • git log -G "wyrażenie" szuka diffów, których dodane lub usunięte linie pasują do wyrażenia regularnego.
  • git log -p pokazuje diff każdego commita.

Jeśli debugujesz zmianę zachowania aplikacji, połącz git log -S z testami i narzędziami diagnostycznymi właściwymi dla aplikacji.

8. git diff: zobacz, co naprawdę się zmieniło

git diff pokazuje różnice między working directory, staging area, commitami i branchami. To komenda, którą warto uruchamiać przed commitem częściej niż po fakcie.

Code
git diff
git diff --staged
git diff main..feature/login
git diff main...feature/login
git diff HEAD~1 HEAD
git diff --name-only
git diff -w

Dwie i trzy kropki odpowiadają na inne pytania. main..feature/login porównuje końcowe drzewa obu commitów, a main...feature/login porównuje feature z punktem wspólnego przodka, co zwykle lepiej odpowiada zmianom widocznym w pull requeście.

Najczęstszy workflow przed commitem:

Code
git status --short
git diff
git diff --staged

git diff chroni przed przypadkowym dorzuceniem debug logów, lokalnych zmian konfiguracyjnych albo fragmentu pracy z innego zadania. To szczególnie ważne, gdy pracujesz na dużym branchu i staging robisz partiami.

9. git clean: jak usunąć nieśledzone pliki?

git clean usuwa pliki, których Git nie śledzi. To przydatne po eksperymentach, buildach, generowanych plikach albo zmianach zależności, ale jest też jedną z bardziej ryzykownych komend z tej listy.

Code
git clean -n
git clean -nd
git clean -ndx
git clean -f
git clean -fd
git clean -fdx
git clean -i

Różnice są istotne:

KomendaEfekt
git clean -nsymuluje usunięcie nieśledzonych plików
git clean -ndsymuluje usunięcie nieśledzonych katalogów
git clean -ndxsymuluje także usunięcie plików ignorowanych
git clean -fusuwa nieśledzone pliki
git clean -fdusuwa nieśledzone pliki i katalogi
git clean -fdxusuwa także pliki ignorowane przez .gitignore
git clean -iuruchamia tryb interaktywny

git clean usuwa pliki, których Git z definicji nie śledzi. Po wykonaniu operacji reflog zwykle nie ma czego odzyskiwać. Pozostają historia lokalna edytora, snapshot systemu plików, kosz systemowy lub backup, dlatego dokładny dry run jest tu ważniejszy niż przy operacjach na commitach.

Jeśli nie masz pewności, użyj git clean -i. Tryb interaktywny jest wolniejszy, ale daje dodatkową kontrolę nad tym, co faktycznie zniknie.

10. git worktree: kilka branchy bez ciągłego przełączania

git worktree pozwala mieć kilka katalogów roboczych podpiętych do tego samego repozytorium. Każdy katalog może pracować na innym branchu.

Code
# Wariant A: podepnij istniejący branch
git worktree add ../project-hotfix hotfix/payment-error
 
# Wariant B: utwórz nowy branch od main
git worktree add -b hotfix/payment-error ../project-hotfix main
 
git worktree list
git worktree remove ../project-hotfix

Pierwsze dwie komendy są wariantami, nie sekwencją do wykonania jedna po drugiej. Git nie pozwala zwykle podpiąć tego samego brancha do dwóch worktree jednocześnie, co chroni przed równoległą edycją tej samej linii pracy w kilku katalogach.

To rozwiązuje typowy problem. Wyobraź sobie sytuację: jesteś w połowie większej zmiany, a nagle trzeba zrobić review albo hotfix. Bez worktree kończy się to stashowaniem, przełączaniem brancha i późniejszym odtwarzaniem kontekstu. Z worktree otwierasz drugi katalog i pracujesz równolegle.

Ratunkowe scenariusze Git krok po kroku

Poniższe przykłady to skrót decyzyjny — zakładają, że przed wykonaniem komendy sprawdzasz stan repozytorium przez git status.

Jak przerwać niedokończony merge, rebase albo cherry-pick?

Nie zgaduj, która operacja trwa. git status pokaże stan sekwencera i właściwą komendę. Jeżeli chcesz wrócić do punktu sprzed rozpoczęcia operacji, użyj odpowiadającego jej --abort:

Code
git merge --abort
git rebase --abort
git cherry-pick --abort
git revert --abort

Uruchom tylko komendę pasującą do bieżącej operacji. --quit ma inne znaczenie: zapomina stan sekwencera, ale nie musi odtworzyć indexu i working tree, dlatego nie jest zamiennikiem --abort.

Jak cofnąć ostatni lokalny commit, ale zostawić zmiany?

Code
git reset --soft HEAD~1

Użyj tego, gdy commit jest lokalny i chcesz poprawić treść commita, dodać brakujący plik albo inaczej podzielić zmiany.

Co zrobić po commicie na złym branchu?

Jeśli commit jest ostatni, nie został wypchnięty, a working tree jest czysty, najpierw utwórz poprawny branch wskazujący ten commit, a dopiero później przesuń branch błędny:

Code
# Będąc nadal na błędnym branchu:
git branch correct-branch HEAD
git reset --hard HEAD~1
 
# Dopiero teraz przejdź do uratowanego commita
git switch correct-branch

Branch correct-branch zabezpiecza commit przed resetem. Jeśli na working tree są dodatkowe zmiany, najpierw je skopiuj lub zapisz, zamiast wykonywać --hard. Gdy commit trafił już na współdzielony remote, bezpieczniejszy wariant to git revert na złym branchu i git cherry-pick na właściwym.

Jak zmienić opis ostatniego commita?

Code
git commit --amend -m "Poprawny opis commita"

amend zmienia hash commita. Lokalnie to normalne narzędzie. Na własnym branchu po pushu uzgodnij przepisanie historii i użyj ochrony --force-with-lease; na branchu współdzielonym dodaj kolejny commit zamiast nadpisywać istniejący.

Jak dodać plik do ostatniego commita?

Code
git add forgotten-file.ts
git commit --amend --no-edit

To dobre rozwiązanie, gdy commit nie został jeszcze wypchnięty albo pracujesz na prywatnym branchu.

Jak cofnąć zmianę wypchniętą na remote?

Code
git revert HEAD
git push

To najczytelniejsza ścieżka na branchach współdzielonych. Historia pokazuje zarówno pierwotną zmianę, jak i commit cofający.

Jak cofnąć merge commit?

Code
git revert -m 1 HEAD

-m 1 wskazuje pierwszego rodzica jako główną linię historii, ale nie każdy merge należy cofać względem rodzica numer 1. Najpierw sprawdź rodziców przez git show --no-patch --pretty=%P HEAD i potwierdź właściwą linię. Cofnięcie merge commita wpływa również na zachowanie przyszłych scaleń, dlatego w złożonym przypadku przećwicz operację na branchu testowym.

Jak odzyskać usunięty śledzony plik?

Jeżeli usunięcie nie trafiło do staging area, przywróć wersję z indexu:

Code
git restore -- path/to/file.ts

Jeżeli usunięcie zostało już dodane do staging area, najpierw odtwórz wpis indexu z HEAD, a następnie plik roboczy:

Code
git restore --staged -- path/to/file.ts
git restore -- path/to/file.ts

Jeśli chcesz pobrać wersję z określonego commita, wskaż źródło jawnie:

Code
git restore --source abc1234 -- path/to/file.ts

Komendy zapisujące do working tree mogą nadpisać lokalną wersję pliku. Przed wykonaniem sprawdź git diff -- path/to/file.ts, aby nie usunąć innych zmian w tym samym miejscu.

Jak pobrać jeden plik z innego brancha?

Code
git restore --source other-branch -- path/to/file.ts

To czytelniejsza, nowocześniejsza alternatywa dla starszych wariantów opartych o git checkout --.

Kiedy wolno użyć push --force-with-lease?

Po rebase lub amend na własnym branchu pull requesta zwykły push nie jest fast-forward. --force-with-lease odmawia nadpisania, jeśli zdalna referencja nie ma oczekiwanej wartości, dlatego jest bezpieczniejsze od --force, ale nie stanowi blokady absolutnej. Automatyczny fetch może zaktualizować remote-tracking branch i osłabić domyślną kontrolę.

Code
git fetch origin
git log --oneline --left-right origin/my-branch...my-branch
git push --force-with-lease origin my-branch

Nie stosuj tego mechanizmu do main ani brancha współdzielonego bez jawnego uzgodnienia i ochrony po stronie serwera.

Jak sprawdzić, kto zmienił konkretną linię?

Code
git blame path/to/file.ts
git blame -L 10,20 path/to/file.ts

Wbrew nazwie git blame nie służy do szukania winnych — najlepiej traktować go jako narzędzie do znalezienia kontekstu: commita, pull requesta, decyzji technicznej albo osoby, którą warto zapytać o szczegóły.

Git cheat sheet: którą komendę wybrać?

Na koniec krótka, praktyczna ściągawka.

ProblemKomenda
Muszę tymczasowo odłożyć zmianygit stash
Chcę przenieść jeden commitgit cherry-pick <hash>
Zgubiłem commit po reseciegit reflog
Chcę poprawić lokalny ostatni commitgit reset --soft HEAD~1
Chcę cofnąć commit na remotegit revert <hash>
Szukam commita z błędemgit bisect
Sprzątam lokalną historięgit rebase -i
Szukam zmiany w historiigit log -S "fragment"
Sprawdzam, co trafi do commitagit diff i git diff --staged
Usuwam pliki i katalogi nieśledzonegit clean -nd, potem -fd
Usuwam także pliki ignorowanegit clean -ndx, potem -fdx
Pracuję na kilku branchach narazgit worktree
Połączenie intuicyjności z wydajnością, które zapewnia bezproblemową skalowalność kodu.
React

Często zadawane pytania

Jak cofnąć ostatni commit w Git?

Jeśli commit jest tylko lokalny, a katalog roboczy został sprawdzony, użyj git reset --soft HEAD~1, aby zachować zmiany w staging area, albo git reset --mixed HEAD~1, aby zostawić je w working directory. Jeśli commit trafił już na współdzielony branch, bezpiecznym rozwiązaniem jest git revert.

Jak odzyskać utracone commity w Git?

Najpierw sprawdź git reflog, znajdź hash tego commita, a potem utwórz branch przez git switch -c recovered-branch HASH. Musisz pamiętać, że reflog jest lokalny i ma ograniczony czas życia, więc nie czekaj, tylko działaj od razu.

Czy git reflog odzyska zmiany po git reset --hard?

Reflog może wskazać wcześniejszy commit, bo zapisuje ruchy referencji. Zwykle nie odzyska jednak zmian, które nigdy nie zostały zapisane w commicie, stashu ani innym obiekcie Git. Po utracie niezacommitowanej pracy sprawdź jeszcze historię lokalną edytora, snapshot systemu plików i backup.

Czym różni się git reset od git revert?

git reset przesuwa wskaźnik brancha i przepisuje historię, dlatego nadaje się głównie do lokalnych commitów. Z kolei git revert tworzy nowy commit cofający zmianę, więc jest właściwym wyborem dla historii współdzielonej z innymi.

Kiedy używać git stash?

git stash przydaje się, gdy masz niezacommitowane zmiany i musisz szybko z jakiegoś powodu przełączyć kontekst. To narzędzie przydaje się w awaryjnych sytuacjach, a nie jest to zamiennik commitów roboczych na osobnym branchu.

Do czego służy git cherry-pick?

git cherry-pick przenosi wybrany commit na aktualny branch, tworząc nowy commit z tą samą zmianą. Używaj go wtedy, gdy masz do czynienia z pojedynczą, niezależną poprawką.

Jak znaleźć commit, który wprowadził błąd?

Użyj git bisect: oznacz aktualny commit jako bad, znany działający commit jako good, a Git będzie zawężał zakres metodą wyszukiwania binarnego. Automatyzację tego procesu możesz zrobić przez git bisect run.

O autorze

Maciej Sala

Maciej Sala — konsultant technologiczny produktów cyfrowych i web developer z bogatym doświadczeniem w marketingu internetowym oraz SEO. Na co dzień pracuje z Reactem, Next.js i TypeScriptem, a ostatnio także z Astro i narzędziami do automatyzacji procesów AI. Sprawnie łączy perspektywę produktową z praktycznym podejściem do kodu. Przez kilka lat był związany z branżą gier wideo jako project manager i game designer. Absolwent historii na Uniwersytecie Jagiellońskim oraz studiów podyplomowych z marketingu internetowego na AGH w Krakowie. Po godzinach trenuje na siłowni, maluje figurki i rozwija własne projekty.

Pomagam przekładać takie tematy na konkretne wdrożenia w frontendzie, SEO, analityce i procesie produktowym.

Skontaktuj się ze mną

Biblioteka wiedzy na temat Narzędzia

Czytaj dalej

Zobacz więcej wpisów
Pierwszy projekt w Astro 7 od instalacji do wdrożenia

W Astro jedna komenda tworzy projekt z gotowymi skryptami do pracy lokalnej i budowania strony. W tym przewodniku przygotujesz stronę w Astro 7, poznasz strukturę katalogów, sprawdzisz wynik produkcyjnego builda i skonfigurujesz pierwsze wdrożenie.

Maciej Sala

Maciej Sala

Founder StriveLab

Agenty AI w CI CD oraz automatyczne testy i audyt SEO

Agenty AI w terminalu pomagają pojedynczemu deweloperowi, ale już agenty AI w CI/CD pomagają całemu zespołowi, ponieważ wtedy każdy PR dostaje ten sam typ automatycznego feedbacku: ryzyka, brakujące testy, potencjalne regresje, problemy SEO albo niespójność z konwencjami projektu.

Maciej Sala

Maciej Sala

Founder StriveLab

CI/CD dla Next.js z użyciem GitHub Actions

Wypychasz kod, który u Ciebie działał, a produkcja i tak się sypie, bo pominięto testy lub build wykonano lokalnie. CI/CD sprawnie eliminuje ten problem, uruchamiając automatyczny pipeline przy każdym pushu. Continuous Integration dba przy tym o kompilację i testy, a Continuous Deployment dostarcza gotową aplikację na serwer bez ręcznego klikania.

Maciej Sala

Maciej Sala

Founder StriveLab