Mam 2 zatwierdzenia, których nie wypchnąłem:
$ git status
# On branch master
# Your branch is ahead of 'faves/master' by 2 commits.
Jak mogę przywrócić mój pierwszy (najstarszy), ale zachować drugi?
$ git log
commit 3368e1c5b8a47135a34169c885e8dd5ba01af5bb
...
commit baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
...
Stąd:
http://friendfeed.com/harijay/742631ff/git-question-how-do-i-rollback-commit-just-want
Czy muszę po prostu zrobić:
git reset --hard baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
To jest?
Odpowiedzi:
Najbezpieczniejszym i prawdopodobnie najczystszym sposobem jest interakcja.
Lub,
Stamtąd możesz zgniatać zatwierdzenia, co łączy jeden lub więcej zatwierdzeń razem w poprzednim zatwierdzeniu. Aby całkowicie usunąć zatwierdzenie z historii, usuń wiersz z listy.
Możesz cofnąć zatwierdzenie za pomocą,
git revert
ale spowoduje to dodanie większej liczby komunikatów zatwierdzenia do historii, co może być niepożądane. Użyj tego-n
parametru, aby powiedzieć Gitowi, aby nie dokonywał natychmiastowego przywracania. Możesz bazować interaktywnie i wyciskać je do poprzedniego zlecenia, aby utrzymać porządek.Jeśli dwa zatwierdzenia, nad którymi pracujesz, wpływają na te same pliki, możesz zobaczyć konflikt scalania.
Resetowanie repozytorium za pomocą
git reset --hard
należy wykonać ostrożnie, ponieważ nie można go cofnąć.Przepisywanie historii powinno odbywać się ostrożnie.
źródło
rebase
mniejszej ilości, jak to możliwe. Jeśli pracujesz z innymi, po prostu zróbrevert
.To jeśli z http://nakkaya.com/2009/09/24/git-delete-last-commit/ i zadziałało dla mnie
źródło
Nie. git-reset --hard przywróci cię do historii. To, czego szukasz, to git revert, który cofnie zatwierdzenie.
źródło
Właśnie to zrobiłem:
Zepsułem to, więc zrobiłem
Zrobiłem to jeszcze raz. Potem musiałem naciskać w ten sposób:
I zniszczyło to zatwierdzenia nowsze niż zatwierdzenie, do którego przywróciłem. Działa świetnie.
źródło
Nie,
git reset --hard baf8d5e
usunie3368e1c
zatwierdzenie, a HEAD będziebaf8d5e
później.Jeśli chcesz zachować
3368e1c
zatwierdzenie i usunąćbad8d5e
zatwierdzenie, najłatwiejszym rozwiązaniem jest zrobienie „git rebase -i HEAD~2
” (tzn. Interaktywnej bazy dwóch ostatnich zatwierdzeń). To polecenie uruchomi edytor komunikatów zatwierdzania i zobaczysz jeden wiersz dla każdego z dwóch ostatnich zatwierdzeń. Tam po prostu usuwaszbad8d5e
linię zatwierdzenia i zapisujesz. git następnie przepisuje twoją historię i 2. zatwierdzenie zniknie.Istnieją inne przydatne polecenia można użyć w popełnienia edytorze wiadomości jak
squash
,edit
itp Interactive rebase jest bardzo silny!Nie rób tego, jeśli ktoś już widział te zatwierdzenia (wypychanie lub wyciąganie z repozytorium)!
źródło
W odniesieniu do komentarza jtimbermana o
git reset --hard
niemożności wycofania się, nie jest to do końca prawda. Zobacz tutaj: https://stackoverflow.com/questions/5473/undoing-a-git-reset-hard-head1źródło
jest jedynym sposobem na cofnięcie zatwierdzenia, jeśli w repozytorium jest tylko jedno zatwierdzenie (np. wstępne zatwierdzenie i jeszcze 1). Pozostałe sposoby (revert, rebase) odmawiają działania, przynajmniej od wersji 1.7.5.1.
Jeśli zastosujesz się do
git reset
niego,git gc
git faktycznie usunie stare dane zatwierdzenia z repozytorium.źródło
Spowoduje to powrót katalogu z podanego „drzewiastego” katalogu / path / to / dir
źródło
Mam to do pracy, ręcznie edytując kody skrótu ostatnich zatwierdzeń z plików HEAD w folderze repozytorium:
Wcześniej nigdy nie byłem w stanie naciskać na rozpoczęcie operacji UNMERGE, które wykonywałem lokalnie. Powtarzał, że „nie wypchnął niektórych referencji” do Centralnego repozytorium.
źródło