Więc zrobiłem trochę pracy w repozytorium, a kiedy mam zamiar zatwierdzić, zdaję sobie sprawę, że obecnie nie jestem w żadnej gałęzi.
Zdarza się to często podczas pracy z submodułami i jestem w stanie to rozwiązać, ale proces jest żmudny i myślałem, że musi być łatwiejszy sposób na zrobienie tego.
Czy istnieje prosty sposób na powrót do oddziału przy zachowaniu zmian?
git
branch
git-checkout
Erik B.
źródło
źródło
git show
lubgit rev-parse HEAD
), przejdź do gałęzi, a następniegit cherry-pick
skrótu zatwierdzenia.git merge _hash_
git merge <hash-of-the-commit-you-just-made>
.to mi pomogło
źródło
To wynik czegoś takiego:
Więc zróbmy to:
źródło
git gc
między uruchomieniem tych dwóch poleceń, straciłbyś te zatwierdzenia, ale chyba, że uruchamiasz sięgit gc
automatycznie, powinno to być dość wolne od ryzyka podejście. Nadal wybrałbym odpowiedź babay, ale jeśli chcesz uchronić się przed napisaniem dwóch dodatkowych poleceń, myślę, że to jest właściwy sposób.Pozostawiając tutaj inną drogę
źródło
Alternatywnie, możesz skonfigurować swoje podmoduły, aby zamiast znajdować się w domyślnym stanie odłączonej głowy, sprawdź gałąź.
Edytowano, aby dodać:
Jednym ze sposobów jest wyewidencjonowanie określonej gałęzi submodułu, gdy dodasz go za pomocą flagi -b:
Innym sposobem jest po prostu przejście do katalogu submodułów i po prostu sprawdzenie
źródło
gitmodules
może?Jednym ze sposobów, aby skończyć w tej sytuacji, jest zrobienie bazy z odległej gałęzi. W tym przypadku nowe zatwierdzenia są wskazywane przez,
HEAD
alemaster
nie wskazują na nie - wskazuje na to, gdzie było, zanim zmieniłeś podstawę drugiej gałęzi.Możesz ustawić to jako nowe
master
, wykonując:To wymusza aktualizację
master
do wskazaniaHEAD
(bez zakładaniamaster
), a następnie przełącza sięmaster
.źródło
Niedawno znów napotkałem ten problem. Minęło trochę czasu, odkąd ostatnio pracowałem z submodułami i dowiedziałem się więcej o git, zdałem sobie sprawę, że wystarczy sprawdzić gałąź, którą chcesz zatwierdzić. Git zatrzyma działające drzewo, nawet jeśli go nie ukryjesz.
Jeśli chcesz pracować w nowym oddziale, powinno to działać dla Ciebie:
Kasa zakończy się niepowodzeniem, jeśli masz konflikty w działającym drzewie, ale powinno to być dość nietypowe, a jeśli tak się stanie, możesz po prostu schować je, pop i rozwiązać konflikt.
W porównaniu z zaakceptowaną odpowiedzią ta odpowiedź pozwoli Ci zaoszczędzić na wykonaniu dwóch poleceń, których wykonanie i tak nie zajmuje tak długo. Dlatego nie zaakceptuję tej odpowiedzi, chyba że w cudowny sposób uzyska więcej głosów pozytywnych (lub przynajmniej bliskich) niż obecnie akceptowana odpowiedź.
źródło
Następująca metoda może działać:
Spowoduje to bazowanie twoich bieżących zmian HEAD na kapitale. Następnie możesz zmienić gałąź.
Alternatywnym sposobem jest najpierw sprawdzenie oddziału:
Następnie Git powinien wyświetlić SHA1 z twoich odłączonych zatwierdzeń, a następnie możesz je wybrać, np
Możesz też scalić najnowszą:
Aby zobaczyć wszystkich zatwierdzeń z różnych branż (upewnij się, że je mam), uruchom:
git reflog
.źródło
Wiem, że powiedziałem babay w 2012 roku, że myślałem, że jest mało prawdopodobne, aby ktoś nie zdawał sobie sprawy, że nie ma go na gałęzi i nie popełnia. Tak mi się właśnie stało, więc chyba muszę się przyznać, że się myliłem, ale biorąc pod uwagę, że minęło to do 2016 r., Można się sprzeciwić, że w rzeczywistości jest to mało prawdopodobne.
W każdym razie, moim zdaniem utworzenie nowego oddziału jest przesadą. Wszystko co musisz zrobić to:
Jeśli nie skopiowałeś commit-sha przed sprawdzeniem drugiego oddziału, możesz go łatwo znaleźć, uruchamiając:
źródło