Wpadłem tutaj na pewien problem: miałem 28s
w Git gałąź specyficzną dla problemu , którą połączyłem w develop
gałęzi ogólnej . Okazuje się, że zrobiłem to zbyt szybko, więc użyłem git-revert, aby cofnąć scalenie. Teraz jednak nadszedł czas, aby połączyć 28s
się develop
, ale komenda git seryjnej widzi oryginalnego seryjnej i radośnie informuje, że wszystko jest dobrze i gałęzie zostały już połączone. Co mam teraz zrobić? Utworzyć zatwierdzenie „Przywróć” Przywróć 28s -> rozwinąć „”? Nie wydaje się to dobrym sposobem na zrobienie tego, ale w tej chwili nie wyobrażam sobie żadnego innego.
Jak wygląda struktura drzewa:
git
git-merge
git-revert
Toms Mikoss
źródło
źródło
Odpowiedzi:
Musisz „cofnąć cofnięcie”. W zależności od Ciebie, w jaki sposób oryginał został przywrócony, może nie być tak łatwo, jak się wydaje. Zobacz oficjalny dokument na ten temat .
zezwolić:
źródło
Załóżmy, że masz taką historię
Gdzie A, B nie powiedzie się, a W - oznacza powrót do M
Więc zanim zacznę naprawiać znalezione problemy, wybieram W dla mojego oddziału
Następnie cofam zatwierdzenie W w moim oddziale
Po tym, jak mogę kontynuować naprawianie.
Ostateczna historia może wyglądać następująco:
Kiedy wyślę PR, wyraźnie pokaże, że PR jest cofnięty, przywraca i dodaje kilka nowych zatwierdzeń.
źródło
Aby cofnąć przywracanie bez nadmiernego zepsucia przepływu pracy:
Twój oddział funkcji powinien być teraz w stanie normalnie zostać scalony, gdy będziesz na to gotowy. Jedynym minusem jest to, że będziesz mieć kilka dodatkowych zatwierdzeń scalania / przywracania w swojej historii.
źródło
Aby cofnąć przywrócenie w GIT:
źródło
Zamiast tego
git-revert
możesz użyć tego polecenia wdevel
gałęzi, aby wyrzucić (cofnąć) niepoprawne zatwierdzenie scalania (zamiast po prostu cofnąć).Spowoduje to również odpowiednie dostosowanie zawartości katalogu roboczego. Uważaj :
git-reset
. Wszystkie zatwierdzenia po tym, który podasz jakogit reset
argument, zniknie!Zalecam
git-reset
uważne przestudiowanie strony podręcznika przed wypróbowaniem tego.Teraz po zresetowaniu możesz ponownie zastosować zmiany,
devel
a następnie zrobić toBędzie to prawdziwe scalenie ze
28s
wdevel
niczym początkowego (który jest teraz wymazane z historii git za).źródło
reset --hard
ipush origin
. Pamiętaj też, że siła nacisku na pochodzenie może naprawdę zepsuć otwarte PR na GitHub.Właśnie znalazłem ten post w obliczu tego samego problemu. Uważam, że zbyt trudne jest resetowanie hards itp. W końcu skasuję coś, czego nie chcę i nie będę w stanie tego odzyskać.
Zamiast tego sprawdziłem zatwierdzenie, do którego chciałem, aby gałąź wróciła do np
git checkout 123466t7632723
. Następnie przekształcony w oddziałgit checkout my-new-branch
. Następnie usunąłem gałąź, której już nie chciałem. Oczywiście zadziała to tylko wtedy, gdy będziesz w stanie wyrzucić gałąź, którą zawiodłeś.źródło
git reflog
Ochroni cię na twardym resecie na kilka miesięcy w przypadku, gdy później odkryć, że trzeba utraconych zobowiązuje. Reflog jest ograniczony do twojego lokalnego repozytorium.Sugeruję, abyś wykonał poniższe kroki, aby przywrócić przywrócenie, powiedz SHA1.
Teraz utwórz PR dla oddziału
users/yourname/revertOfSHA1
źródło
W tym momencie będziesz mieć czystą gałąź „rozwijania”, z którą możesz regularnie łączyć przeglądarkę funkcji.
źródło