To daje dobre wytłumaczenie zgniatania wielu zatwierdzeń:
http://git-scm.com/book/en/Git-Branching-Rebasing
ale nie działa dla zatwierdzeń, które zostały już wypchnięte. Jak zmiażdżyć kilka ostatnich zatwierdzeń w moich lokalnych i zdalnych repozytoriach?
EDYCJA: Kiedy to zrobię git rebase -i origin/master~4 master
, zachowaj pierwszą jako pick
, ustaw pozostałe trzy jako squash
, a następnie zakończ (przez cx cc w emacs), otrzymuję:
$ git rebase -i origin/master~4 master
# Not currently on any branch.
nothing to commit (working directory clean)
Could not apply 2f40e2c... Revert "issue 4427: bpf device permission change option added"
$ git rebase -i origin/master~4 master
Interactive rebase already started
gdzie 2f40 jest pick
zatwierdzeniem. A teraz żaden z 4 zatwierdzeń nie pojawia się w git log
. Spodziewałem się zrestartowania mojego edytora, aby móc wprowadzić komunikat zatwierdzenia. Co ja robię źle?
git push --force origin master
git rebase -i origin/master
i naprawdę chce wiedzieć, jak zmienić bazowe zatwierdzenia dalej, npgit rebase -i origin/master~20 master
.+
wymusza tylko poprzedzający go refspec.--force
wymusi wypchnięcie wszystkich referencji. Zobacz zaktualizowaną odpowiedź.Na gałęzi mogłem to zrobić w ten sposób (dla ostatnich 4 zmian)
źródło
Drobna różnica w stosunku do zaakceptowanej odpowiedzi, ale miałem wiele trudności ze zgnieceniem i w końcu ją dostałem.
esc --> :wq
Wciśnij do pilota za pomocą:
źródło
Wiele problemów można uniknąć tylko przez stworzenie
branch
do pracy na i nie działa namaster
:git checkout -b mybranch
Następujące działa dla
remote
zatwierdzeń już wypchniętych i mieszaninyremote
wypychanych zatwierdzeń /local
tylko zatwierdzeń:Mam też kilka notatek z prośbą o ściągnięcie, które mogą być pomocne.
źródło
git rebase -i master
otworzy się edytor vm i msgs coś takiego
Tutaj zmieniłem pick dla wszystkich innych zatwierdzeń na „f” (oznacza naprawę).
git push -f origin feature/feature-branch-name-xyz
to naprawi wszystkie zatwierdzenia do jednego zatwierdzenia i usunie wszystkie pozostałe zatwierdzenia. Zrobiłem to i to mi pomogło.
źródło
Podczas pracy z Gitlab lub Github możesz w ten sposób wpaść w kłopoty. Zgniatasz swoje zobowiązania jedną z powyższych metod. Moim ulubionym jest:
wybierz squash lub fixup dla swojego zatwierdzenia. W tym momencie sprawdziłbyś status git. Wiadomość może być:
I możesz pokusić się o to. NIE rób tego, bo będziesz w takiej samej sytuacji jak poprzednio.
Zamiast tego pchnij do swojego źródła za pomocą:
+ Pozwala na wymuszenie push tylko do jednej gałęzi.
źródło
Do zgniatania dwóch zatwierdzeń, z których jeden został już wypchnięty, w jednym oddziale działały:
Domyślnie będzie to zawierać komunikat zatwierdzenia najnowszego zatwierdzenia jako komentarz do starszego zatwierdzenia.
źródło
1)
git rebase -i HEAD~4
Aby rozwinąć: Działa na bieżącym oddziale; HEAD ~ 4 oznacza zgniecenie ostatnich czterech zmian; tryb interaktywny (-i)
2) W tym momencie edytor otworzył z listą zatwierdzeń, aby zmienić drugi i kolejne zatwierdzenia, zamieniając pick na squash, a następnie zapisz go.
dane wyjściowe: Pomyślnie ponownie wydano i zaktualizowano refs / heads / branch-name.
3)
git push origin refs/heads/branch-name --force
wynik:
źródło