Zresetowałem mojego lokalnego wzorca do zatwierdzenia za pomocą tego polecenia:
git reset --hard e3f1e37
kiedy wprowadzę $ git status
polecenie, terminal mówi:
# On branch master
# Your branch is behind 'origin/master' by 7 commits, and can be fast-forwarded.
# (use "git pull" to update your local branch)
#
nothing to commit, working directory clean
Ponieważ chcę zresetować także origin / nagłówek, kasuję do origin / master:
$ git checkout origin/master
Note: checking out 'origin/master'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b new_branch_name
HEAD is now at 2aef1de... master problem fixed for master. its okay now.
i zresetuj nagłówek za pomocą tego polecenia:
$ git reset --hard e3f1e37
HEAD is now at e3f1e37 development version code incremented for new build.
Następnie próbowałem dodać zatwierdzenie do źródła / nagłówka, że nie udało mi się.
$ git commit -m "Reverting to the state of the project at e3f1e37"
# HEAD detached from origin/master
nothing to commit, working directory clean
Wreszcie, kasę do mojego lokalnego mistrza.
$ git checkout master
Switched to branch 'master'
Your branch is behind 'origin/master' by 7 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
Ponieważ zresetowałem szefa źródła / wzorca, oczekuję, że lokalny i pochodzenie powinny być w tym samym kierunku, ale jak widzisz, git mówi, że mój lokalny / wzorzec jest za początkiem / wzorzec o 7 zatwierdzeń.
Jak mogę rozwiązać ten problem? To, czego szukam, to szef local / master i origin / master wskazują na to samo zatwierdzenie. Poniższy obraz pokazuje, co zrobiłem. Dzięki.
źródło
Odpowiedzi:
origin/xxx
gałęzie są zawsze wskaźnikiem do pilota. Nie możesz ich wyrejestrować, ponieważ nie są one wskaźnikiem do lokalnego repozytorium (pobierasz tylko zatwierdzenie. Dlatego nie zobaczysz nazwy zapisanej w znaczniku gałęzi interfejsu wiersza poleceń, a jedynie skrótu zatwierdzenia).To, co musisz zrobić, aby zaktualizować pilota, to wymusić wypchnięcie lokalnych zmian w celu opanowania:
źródło
remote: error: denying non-fast-forward refs/heads/master (you should pull first)
Znalezione tutaj rozwiązanie pomogło nam zaktualizować wzorzec do poprzedniego zatwierdzenia, które już zostało wypchnięte:
Kluczową różnicą w stosunku do przyjętej odpowiedzi jest skrót zatwierdzenia „e3f1e37:” przed master w poleceniu push.
źródło
remote: error: denying non-fast-forward refs/heads/master (you should pull first)
you should pull first
:)git config receive.denynonfastforwards false
ale tak naprawdę ustawiłem to ręcznie w moim lokalnym repozytorium git,/opt/git
które utworzyłem, aby bawić się pomysłami tutaj. Nie jestem pewien, jak i czy można to zrobić dla bitbucket, github itp. I @intuitivepixel, co jest bezcelowe, ponieważ odwraca to, co próbujesz osiągnąć przy twardym resecie.Zakładając, że twoja gałąź jest wywoływana
master
zarówno tutaj, jak i zdalnie, i że twój pilot jest nazywany,origin
możesz:Należy jednak tego unikać, jeśli ktoś inny pracuje ze zdalnym repozytorium i wyciągnął zmiany. W takim przypadku lepiej cofnąć niepotrzebne zmiany, a następnie wcisnąć jak zwykle.
źródło
Ponieważ miałem podobną sytuację, pomyślałem, że podzielę się swoją sytuacją i jak te odpowiedzi mi pomogły (dziękuję wszystkim).
Postanowiłem więc pracować lokalnie, zmieniając moje ostatnie zatwierdzenie za każdym razem, gdy chciałem zapisać swoje postępy w głównej gałęzi (wiem, że powinienem był rozgałęzić się, zaangażować się w to, dalej naciskać, a później połączyć się z powrotem do master).
Pewnej późnej nocy, w paranoicznym strachu przed utratą postępów w awarii sprzętu lub czegoś poza eterem, postanowiłem popchnąć mistrza do pochodzenia. Później ciągle zmieniałem swój lokalny oddział główny i kiedy zdecydowałem, że nadszedł czas, aby przejść dalej, miałem do czynienia z różnymi gałęziami głównymi i odkryłem, że nie mogę zmienić źródła / wyższego poziomu ( duh! ), Tak jak mogę lokalne gałęzie rozwoju.
Więc nie zameldowałem się lokalnie, ponieważ już byłem po zatwierdzeniu. Mistrz pozostał niezmieniony. Nie musiałem nawet resetować - twardo, moje obecne zatwierdzenie było OK.
Po prostu wymusiłem push do początku, nawet nie określając, jakie zobowiązanie chciałem wymusić na mistrzu, ponieważ w tym przypadku jest to cokolwiek HEAD. Sprawdzone,
git diff master..origin/master
więc nie było żadnych różnic i to wszystko. Wszystko naprawione. Dzięki! (Wiem, jestem początkującym, proszę wybaczyć!).Więc jeśli już masz lokalną gałąź główną, po prostu:
źródło