Uwaga dodatkowa: najpierw może się przydać git fetch upstream, a następnie rzucić okiem na git diff upstream/branchto, co się połączy. Jeśli wszystko jest w porządku, kontynuujgit merge upstream/branch
Shahbaz,
1
Utracisz wszystkie swoje uliczne ulgi i zostaniesz zadokowany tygodniową wypłatę, jeśli dowolny broker modnisia zobaczy, że wykonujesz polecenia git z graficznego interfejsu użytkownika, ale zarówno GitHub Desktop, jak i Atom mają bezpieczne, proste przyciski do undozatwierdzania i pola wyboru, aby łatwo i wyraźnie ustawiać i rozpakowywać pliki. GUI to także ludzie!
Dem Pilafian
Odpowiedzi:
391
Lub, aby było bardziej wyraźne niż inna odpowiedź:
git pull
ups
git reset --keep HEAD@{1}
Wersje git starsze niż 1.7.1 nie mają --keep. Jeśli używasz takiej wersji, możesz jej użyć --hard- ale jest to niebezpieczna operacja, ponieważ traci wszelkie lokalne zmiany.
ORIG_HEAD to poprzedni stan HEAD, ustawiony za pomocą poleceń, które mogą mieć niebezpieczne zachowanie, aby można je było łatwo przywrócić. Jest mniej przydatny teraz, gdy Git się ponownie zarejestrował: HEAD @ {1} jest mniej więcej równoważny ORIG_HEAD (HEAD @ {1} jest zawsze ostatnią wartością HEAD, ORIG_HEAD jest ostatnią wartością HEAD przed niebezpieczną operacją)
@hugemeow To byłoby dobre pytanie SO. Tymczasem man git-rev-parseopisuje to. HEAD@{1}jest poprzednią wartością symboliczną, HEADpodczas refloggdy HEAD^jest (pierwszą) nadrzędną wersją prądu HEAD. Te dwa elementy muszą być równoważne (np. Po zmianie bazy, twardym resecie, przełączniku gałęzi i tym podobne). Przeczytaj link do artykułu, aby się zalogować. Pozdrawiam
sehe
10
Użytkownicy programu PowerShell uciekają w nawiasy klamrowe:git reset HEAD@`{1`}
Robert Claypool,
3
ss64.com/ps/syntax-esc.html myślę, że chciał, aby wpisać HEAD@`{1`}, czy o to chodzi to, co działa na muszli POSIX zbyt:'HEAD@{1}'
sehe
2
Myślę, że to nie tylko zresetowało ściąganie, ale także moje zobowiązania = (
falsarella,
67
git reflog showpowinien pokazać historię HEAD. Możesz użyć tego, aby dowiedzieć się, gdzie byłeś przed pull. Następnie możesz resetprzystąpić HEADdo tego zatwierdzenia.
git reflog show dał ten wynik: c9e5e4d HEAD @ {0}: pull: przewijanie do przodu 1c86a22 HEAD @ {1}: pull origin master: przewijanie do przodu 05c141a HEAD @ {2}: pull: przewijanie do przodu Czy mogę bezpiecznie zresetować HEAD do HEAD @ {1}
Kartins
Inna odpowiedź sehe zawiera szczegółowe informacje, jak się tam dostać.
Noufal Ibrahim
Było to bardzo przydatne po katastrofalnym popełnieniu w jakiś sposób przeplatanych zobowiązań scalania w mojej historii. Wydostałem się z nich, szukając ostatniego znanego dobra na liście zmian, a następnie zmuszając do pchania.
Domenic,
Co jeśli pullpierwsza akcja? Jeśli pulljest HEAD@{1}i nic innego przed tym, jak powrócisz do stanu sprzed tego?
Hendra Uzia,
Czy odtworzyć repozytorium?
Noufal Ibrahim,
29
To zadziałało dla mnie.
git reset --hard ORIG_HEAD
Cofnij scalenie lub pociągnij:
$ git pull (1)
Auto-merging nitfol
CONFLICT (content): Merge conflict in nitfol
Automatic merge failed; fix conflicts and then commit the result.
$ git reset --hard (2)
$ git pull . topic/branch (3)
Updating from 41223... to 13134...
Fast-forward
$ git reset --hard ORIG_HEAD (4)
Znajdź <SHA#>zatwierdzenie, które chcesz przejść. Możesz go znaleźć w github, wpisując git loglub git reflog showw wierszu poleceń, a następnie wykonaj
git reset --hard <SHA#>
Nawet jeśli możesz mieć lokalne modyfikacje w działającym drzewie, możesz spokojnie powiedzieć, git pullkiedy wiesz, że zmiana w drugiej gałęzi nie pokrywa się z nimi.
Po sprawdzeniu wyniku scalenia może się okazać, że zmiana w drugim oddziale jest niezadowalająca. Uruchomienie git reset --hard ORIG_HEAD
pozwoli ci wrócić do miejsca, w którym byłeś, ale odrzuci twoje lokalne zmiany, których nie chcesz. git reset --mergezachowuje lokalne zmiany.
git fetch upstream
, a następnie rzucić okiem nagit diff upstream/branch
to, co się połączy. Jeśli wszystko jest w porządku, kontynuujgit merge upstream/branch
undo
zatwierdzania i pola wyboru, aby łatwo i wyraźnie ustawiać i rozpakowywać pliki. GUI to także ludzie!Odpowiedzi:
Lub, aby było bardziej wyraźne niż inna odpowiedź:
ups
Wersje git starsze niż 1.7.1 nie mają
--keep
. Jeśli używasz takiej wersji, możesz jej użyć--hard
- ale jest to niebezpieczna operacja, ponieważ traci wszelkie lokalne zmiany.Do komentatora
źródło
man git-rev-parse
opisuje to.HEAD@{1}
jest poprzednią wartością symboliczną,HEAD
podczasreflog
gdyHEAD^
jest (pierwszą) nadrzędną wersją prąduHEAD
. Te dwa elementy muszą być równoważne (np. Po zmianie bazy, twardym resecie, przełączniku gałęzi i tym podobne). Przeczytaj link do artykułu, aby się zalogować. Pozdrawiamgit reset HEAD@`{1`}
HEAD@`{1`}
, czy o to chodzi to, co działa na muszli POSIX zbyt:'HEAD@{1}'
git reflog show
powinien pokazać historię HEAD. Możesz użyć tego, aby dowiedzieć się, gdzie byłeś przedpull
. Następnie możeszreset
przystąpićHEAD
do tego zatwierdzenia.źródło
pull
pierwsza akcja? Jeślipull
jestHEAD@{1}
i nic innego przed tym, jak powrócisz do stanu sprzed tego?To zadziałało dla mnie.
Cofnij scalenie lub pociągnij:
Sprawdź to: HEAD i ORIG_HEAD w Git po więcej.
źródło
Znajdź
<SHA#>
zatwierdzenie, które chcesz przejść. Możesz go znaleźć w github, wpisującgit log
lubgit reflog show
w wierszu poleceń, a następnie wykonajgit reset --hard <SHA#>
źródło
<SHA#>
From https://git-scm.com/docs/git-reset#Documentation/git-reset.txt-Undoamergeorpullinsideadirtyworkingtree
Zobacz także https://stackoverflow.com/a/30345382/621690
źródło