Za pomocą git zrobiłem coś takiego
git clone
git checkout {a rev number tree rev before} (here I started to be in a detached head state)
//hacking
git commit
//hacking
git commit
(some commit where made on origin/master)
git pull (which does complete because there was some error due to the fact that I'm no more on master)
Ponieważ powiedziało mi, że wciąż mogę popełnić błąd, gdy jestem w stanie oderwanej głowy, więc to zrobiłem. Ale teraz chcę polubić moją odłączoną gałąź główną i moją lokalną gałąź główną, a następnie przesłać moją grupę zmian do origin / master.
Więc moje pytanie brzmi: jak mogę połączyć gałąź master z moim faktycznym stanem (odłączona głowa)
git
git-checkout
benzen
źródło
źródło
Odpowiedzi:
Utwórz gałąź, w której jesteś, a następnie przełącz się na master i scal ją:
źródło
Możesz zrobić coś takiego.
Byłoby jeszcze prostsze
ale ma to niewielkie niebezpieczeństwo, że jeśli popełnisz błąd, może być nieco trudniej odzyskać zmiany popełnione na odłączonej głowie.
źródło
git merge HEAD@{1}
, prawdopodobnie powinieneś upewnić się, że jest to to, którego chcesz użyćgit reflog
Oto co zrobiłem:
Zasadniczo pomyśl o
detached HEAD
nowej gałęzi bez nazwy. Możesz zatwierdzić w tej gałęzi, tak jak każdą inną gałąź. Po zakończeniu zatwierdzania chcesz przekazać go do pilota.Pierwszą rzeczą, którą musisz zrobić, to nadać temu
detached HEAD
nazwę. Możesz to zrobić w prosty sposóbdetached HEAD
:Teraz możesz przekazać go zdalnie, jak każdej innej gałęzi.
W moim przypadku chciałem również przewinąć tę gałąź do przodu, aby opanować wraz z zatwierdzeniami dokonanymi w
detached HEAD
(terazsome-new-branch
). Wszystko co zrobiłem togit pull # To make sure my local copy of master is up to date
git merge master // This added current state of master to my changes
Oczywiście później to połączyłem
master
.O to chodzi.
źródło
git checkout -b new-branch
pracował dla mnie. Inne sugestie wymagałygit branch new-branch
, ale to pozostawiło mnie w bezruchu, a nowy oddział nie zauważył moich zmian.Możesz po prostu zrobić
git merge <commit-number>
lubgit cherry-pick <commit> <commit> ...
Zgodnie z sugestią Ryana Stewarta możesz również utworzyć gałąź z bieżącego HEAD:
Lub po prostu tag:
źródło
git rev-parse HEAD
W przypadku odłączonego HEAD, zatwierdzenia działają normalnie, tyle że żaden nazwany oddział nie jest aktualizowany. Aby zaktualizować gałąź główną z zatwierdzonymi zmianami, utwórz gałąź tymczasową tam, gdzie jesteś (w ten sposób gałąź tymczasowa będzie miała wszystkie zatwierdzone zmiany, które wprowadziłeś w odłączonym HEAD), następnie przełącz się na gałąź główną i połącz gałąź tymczasową z mistrz.
źródło
Prostym rozwiązaniem jest po prostu stworzyć nową gałąź do tego zobowiązać i kasę do niego:
git checkout -b <branch-name> <commit-hash>
.W ten sposób wszystkie wprowadzone zmiany zostaną zapisane w tej gałęzi. W razie potrzeby wyczyszczenia gałęzi master z resztek zatwierdzeń, należy uruchomić
git reset --hard master
.Dzięki temu będziesz przepisywać swoje oddziały, więc nie przeszkadzaj nikomu tymi zmianami. Zapoznaj się z tym artykułem, aby lepiej zilustrować odłączony stan HEAD .
źródło
Może nie jest to najlepsze rozwiązanie (przepisze historię), ale możesz też
git reset --hard <hash of detached head commit>
.źródło