Jak cofnąć ostatnie commity lokalne w Git?
Przypadkowo zatwierdziłem błędne pliki do Git , ale nie wcisnąłem jeszcze commita na serwer.
Jak mogę cofnąć te commity z lokalnego repozytorium ?
30 answers
Undo a commit & redo
$ git commit -m "Something terribly misguided" # (0: Your Accident)
$ git reset HEAD~ # (1)
[ edit files as necessary ] # (2)
$ git add . # (3)
$ git commit -c ORIG_HEAD # (4)
-
Ta komenda jest odpowiedzialna za undo. Spowoduje to cofnięcie ostatniego commita, gdy pozostawi drzewo robocze (Stan plików na dysku) nietknięte. musisz dodać je ponownie, zanim będziesz mógł je ponownie zatwierdzić).
-
Wprowadzić poprawki do plików drzewa roboczego.
-
git add
wszystko, co chcesz umieścić w nowym commicie. -
Zatwierdź zmiany, ponowne użycie starej wiadomości commit.
reset
skopiowałem starą głowę do.git/ORIG_HEAD
;commit
za pomocą-c ORIG_HEAD
otworzy się edytor, który początkowo zawiera komunikat dziennika ze starego commita i pozwala na jego edycję. Jeśli nie musisz edytować wiadomości, możesz użyć opcji-C
.
Alternatywnie, aby edytować poprzedni commit (lub tylko jego komunikat commit), commit --amend
doda zmiany w bieżącym indeksie do poprzedniego zatwierdzenia.
Aby usunąć (nie przywrócić) commit który został wypchnięty na Serwer , konieczne jest przepisanie historii za pomocą git push origin master --force
.
Czytaj Dalej
Jak mogę wrócić do poprzedniej lokalizacji? (Odłączona Głowica) & Undo commits
Powyższa odpowiedź pokaże Ci git reflog
, której możesz użyć do określenia SHA-1 dla commitu, do którego chcesz powrócić. Po uzyskaniu tej wartości użyj sekwencji poleceń, jak wyjaśniono powyżej.
HEAD~
jest tym samym co HEAD~1
. Artykuł Co to jest głowa w git? jest pomocna, jeśli chcesz anulować wiele commitów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-21 16:53:10
Cofnięcie commita jest trochę przerażające, jeśli nie wiesz, jak to działa. Ale to jest naprawdę niezwykle łatwe, jeśli rozumiesz. Pokażę Ci 4 różne sposoby na cofnięcie commita.
Wariant 1: git reset --hard
Powiedzmy, że masz to, gdzie C to twoja głowa i (F) to stan twoich plików.
(F)
A-B-C
↑
master
Chcesz Nuke zatwierdzić C i nigdy więcej go nie zobaczyć i stracić wszystkie zmiany w lokalnie zmodyfikowanych plikach . Robisz to:
git reset --hard HEAD~1
Wynik jest:
(F)
A-B
↑
master
Teraz B jest głową. Ponieważ użyłeś --hard
, Twoje pliki są resetowane do ich stanu w commit B.]}
Wariant 2: git reset
Ah, ale załóżmy, że commit C nie był katastrofą, ale tylko trochę wyłączony. Chcesz cofnąć commit, ale Zachowaj zmiany na trochę edycji, zanim zrobisz lepszy commit. Od tej chwili możesz przypisać do domeny hosting, wybierając usługę dostosowaną do Twoich potrzeb:]}
(F)
A-B-C
↑
master
Możesz to zrobić, pozostawiając --hard
:
git reset HEAD~1
W tym przypadku wynik jest:
(F)
A-B-C
↑
master
W obu przypadkach HEAD jest tylko wskaźnikiem do ostatniego commita. Kiedy wykonujesz git reset HEAD~1
, mówisz Gitowi, aby przesunął wskaźnik głowy do tyłu o jeden commit. Ale (chyba że użyjesz --hard
) zostawiasz swoje pliki takie, jakie były. Więc teraz git status
pokazuje zmiany, które zarejestrowałeś w C. nic nie straciłeś!
Wariant 3: git reset --soft
Aby uzyskać najlżejszy dotyk, możesz nawet cofnąć zatwierdzenie, ale pozostawić swoje pliki i indeks :
git reset --soft HEAD~1
To nie tylko zostawia Twoje pliki w spokoju, nawet twój indeks zostaje w spokoju. Gdy wykonasz git status
, zobaczysz, że w indeksie znajdują się te same pliki, co poprzednio. W rzeczywistości, zaraz po tej komendzie, możesz zrobić git commit
i ponownie wykonać ten sam commit, który właśnie miałeś.
Opcja 4: zrobiłeś git reset --hard
i musisz odzyskać ten kod
Jeszcze jedno: Załóżmy, że zniszczysz commit tak jak w pierwszym przykładzie, ale potem odkryjesz, że potrzebujesz go mimo wszystko ? Pech, prawda?
Nie, jest nadal sposób, aby go odzyskać. Wpisz git reflog
, a zobaczysz listę (częściowych) commitów shas (czyli hashów), w których się poruszałeś. Znajdź commit, który zniszczyłeś i zrób to:]}
git checkout -b someNewBranchName shaYouDestroyed
Wskrzesiłeś ten commit. Commity nie są niszczone w Git przez jakieś 90 dni, więc zazwyczaj możesz wrócić i uratować jedną, której nie chciałeś się pozbyć.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-09 17:53:06
Są dwa sposoby na "cofnięcie" ostatniego commita, w zależności od tego, czy został on już upubliczniony (przeniesiony do zdalnego repozytorium):
Jak cofnąć lokalny commit
Powiedzmy, że zaangażowałem się lokalnie, ale teraz chcę usunąć ten commit.
git log
commit 101: bad commit # Latest commit. This would be called 'HEAD'.
commit 100: good commit # Second to last commit. This is the one we want.
Aby przywrócić wszystko do stanu sprzed ostatniego commita, musimy reset
zmienić commit przed HEAD
:
git reset --soft HEAD^ # Use --soft if you want to keep your changes
git reset --hard HEAD^ # Use --hard if you don't care about keeping the changes you made
Teraz git log
pokaże, że nasz ostatni commit został usunięty.
Jak aby cofnąć commit publiczny
Jeśli już upubliczniłeś swoje commity, będziesz chciał utworzyć nowy commit, który "przywróci" zmiany wprowadzone w poprzednim commicie (bieżącym HEAD).
git revert HEAD
Twoje zmiany zostaną teraz przywrócone i gotowe do zatwierdzenia:
git commit -m 'restoring the file I removed by accident'
git log
commit 102: restoring the file I removed by accident
commit 101: removing a file we don't need
commit 100: adding a file that we need
Aby uzyskać więcej informacji, sprawdź Git Basics - cofanie rzeczy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55
Dodaj/usuń pliki, aby uzyskać rzeczy tak, jak chcesz:
git rm classdir
git add sourcedir
Następnie zmień commit:
git commit --amend
Poprzedni, błędny commit zostanie edytowany, aby odzwierciedlić nowy stan indeksu - innymi słowy, będzie to tak, jakbyś nigdy nie popełnił błędu.
Zauważ, że powinieneś to zrobić tylko wtedy, gdy jeszcze nie naciskałeś. Jeśli popchnąłeś, będziesz musiał normalnie wprowadzić poprawkę.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-12 06:45:55
git rm yourfiles/*.class
git commit -a -m "deleted all class files in folder 'yourfiles'"
Lub
git reset --hard HEAD~1
Ostrzeżenie: powyższe polecenie trwale usunie modyfikacje .java
plików (i wszystkich innych plików), które chcesz zatwierdzić.
hard reset
do HEAD-1
ustawi twoją kopię roboczą na stan commita przed błędnym commitem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-13 22:03:28
Aby zmienić ostatni commit
Zastąp pliki w indeksie:
git rm --cached *.class
git add *.java
Wtedy, jeśli jest to prywatna gałąź, Zmień commit:
git commit --amend
Lub, jeśli jest to współdzielona gałąź, utwórz nowy commit:
git commit -m 'Replace .class files with .java files'
(aby zmienić poprzedni commit, użyj awesome interactive rebase.)
ProTip™: Dodaj *.class
do gitignore , aby powstrzymać to ponownie.
Aby przywrócić a commit
Zmiana commita jest idealnym rozwiązaniem, jeśli chcesz zmienić ostatni commit, ale bardziej ogólnym rozwiązaniem jest reset
.
Możesz zresetować Git do dowolnego commita używając:
git reset @~N
Gdzie N
jest liczbą commitów przed HEAD
, a @~
resetuje się do poprzedniego commita.
Więc zamiast zmieniać commit, możesz użyć:
git reset @~
git add *.java
git commit -m "Add .java files"
Zobacz git help reset
, a konkretnie sekcje na --soft
--mixed
i --hard
, dla lepszego zrozumienia tego, co to tak.
Reflog
Jeśli nawalisz, zawsze możesz użyć reflogu, aby znaleźć odrzucone commity:
$ git reset @~
$ git reflog
c4f708b HEAD@{0}: reset: moving to @~
2c52489 HEAD@{1}: commit: added some .class files
$ git reset 2c52489
... and you're back where you started
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-21 13:40:42
Użyj git revert <commit-id>
.
Aby uzyskać identyfikator zatwierdzenia, użyj git log
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-21 13:47:43
Jeśli planujesz całkowicie cofnąć lokalny commit, cokolwiek zmieniłeś w commicie i jeśli nie martwisz się o to, wykonaj następujące polecenie.
git reset --hard HEAD^1
(ta komenda zignoruje cały commit, a zmiany zostaną całkowicie utracone z lokalnego drzewa roboczego). Jeśli chcesz cofnąć swój commit, ale chcesz, aby zmiany w obszarze przejściowym (przed commitem, tak jak po git add
), wykonaj następujące polecenie.
git reset --soft HEAD^1
Teraz twój oddany / align = "left" / Załóżmy, że jeśli chcesz zwiększyć scenę plików, ponieważ musisz edytować niewłaściwą zawartość, wykonaj następujące polecenie
git reset HEAD
Teraz zatwierdzono pliki, które mają pochodzić z obszaru zainscenizowanego do obszaru nieakcentowanego. Teraz pliki są gotowe do edycji, więc cokolwiek zmienisz, chcesz je edytować, dodać i wprowadzić nowy commit.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-21 14:11:02
Jeśli masz zainstalowane Git Extras , możesz uruchomić git undo
, aby cofnąć najnowszy commit. git undo 3
cofnie ostatnie trzy commity.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-21 13:46:26
Chciałem cofnąć ostatnie pięć commitów w naszym współdzielonym repozytorium. Sprawdziłem identyfikator wersji, do którego chciałem się wycofać. Następnie wpisałem następujące.
prompt> git reset --hard 5a7404742c85
HEAD is now at 5a74047 Added one more page to catalogue
prompt> git push origin master --force
Total 0 (delta 0), reused 0 (delta 0)
remote: bb/acl: neoneye is allowed. accepted payload.
To [email protected]:thecompany/prometheus.git
+ 09a6480...5a74047 master -> master (forced update)
prompt>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-21 13:47:00
Wolę używać git rebase -i
do tego zadania, ponieważ wyskakuje Ładna lista, gdzie mogę wybrać commity, których chcę się pozbyć. To może nie być tak bezpośrednie, jak niektóre inne odpowiedzi tutaj, ale to po prostu wydaje się właściwe .
Wybierz liczbę commitów, które chcesz wyświetlić, a następnie wywołaj w ten sposób (aby zapisać trzy ostatnie)
git rebase -i HEAD~3
Przykładowa lista
pick aa28ba7 Sanity check for RtmpSrv port
pick c26c541 RtmpSrv version option
pick 58d6909 Better URL decoding support
Wtedy Git usunie commity dla każdej linii, którą usuniesz.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-06 21:59:20
Jak naprawić poprzedni lokalny commit
Użyj git-gui (lub podobnego), aby wykonać git commit --amend
. Z GUI można dodawać lub usuwać pojedyncze pliki z zatwierdzania. Możesz również zmodyfikować wiadomość zatwierdzającą.
Jak cofnąć poprzedni lokalny commit
Wystarczy zresetować gałąź do poprzedniej lokalizacji (na przykład używając gitk
lub git rebase
). Następnie ponownie zastosuj zmiany z zapisanej kopii. Po zbieraniu śmieci w lokalnym repozytorium, będzie to jak niechciany commit nigdy stało się. Aby zrobić to wszystko za pomocą jednego polecenia, użyj git reset HEAD~1
.
Słowo ostrzeżenia: nieostrożne użycie git reset
jest dobrym sposobem na wprowadzenie kopii roboczej w stan dezorientacji. Polecam, aby nowicjusze Gita unikali tego, jeśli mogą.
Jak cofnąć publiczny commit
Wykonaj odwrócony wybór wiśni (git-revert ) aby cofnąć zmiany.
Jeśli nie ściągnąłeś jeszcze innych zmian na swoją gałąź, możesz po prostu zrób...
git revert --no-edit HEAD
Następnie wypchnij zaktualizowaną gałąź do udostępnionego repozytorium.
historia zmian pokaże oba commity, osobno .
Zaawansowane: korekta gałęzi prywatnej w repozytorium publicznym
To może być niebezpieczne-upewnij się, że masz lokalną kopię gałęzi do przepuszczenia.
uwaga: nie chcesz tego robić, jeśli ktoś inny może pracować nad tą gałęzią.
git push --delete (branch_name) ## remove public version of branch
Clean up Twój oddział lokalnie następnie repush...
git push origin (branch_name)
w normalnym przypadku prawdopodobnie nie musisz się martwić, że historia zmian w prywatnych gałęziach będzie nieskazitelna. Po prostu naciśnij commit (zobacz "jak cofnąć commit publiczny" powyżej), a później wykonaj squash-merge, aby ukryć historię.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-07 05:57:27
Jeśli chcesz to trwale cofnąć i sklonowałeś jakieś repozytorium
Identyfikator zatwierdzenia może być widoczny przez
git log
Wtedy możesz zrobić-
git reset --hard <commit_id>
git push origin <branch_name> -f
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-24 09:34:15
Jeśli popełniłeś śmieci, ale nie pchnąłeś,
git reset --soft HEAD~1
HEAD~1 jest skrótem od commit przed head. Alternatywnie możesz odwołać się do SHA-1 skrótu, jeśli chcesz zresetować. --soft opcja usunie commit, ale pozostawi wszystkie Twoje zmienione pliki "zmiany do zatwierdzenia", jak to określiłby git status.
Jeśli chcesz pozbyć się zmian w śledzonych plikach w drzewie roboczym od commit przed head use "--hard " zamiast tego.
Lub
Jeśli już nacisnąłeś i ktoś pociągnął, co zwykle jest w moim przypadku, nie możesz użyć git reset . Możesz jednak wykonać git revert,
git revert HEAD
Utworzy to nowy commit, który odwróci wszystko wprowadzone przez przypadkowy commit.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-25 07:58:25
Na SourceTree (GUI dla GitHub), możesz kliknąć prawym przyciskiem myszy commit i wykonać 'Reverse Commit'. To powinno cofnąć zmiany.
Na terminalu:
Można alternatywnie użyć:
git revert
Lub:
git reset --soft HEAD^ # Use --soft if you want to keep your changes.
git reset --hard HEAD^ # Use --hard if you don't care about keeping your changes.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-24 09:34:11
Jedno polecenie:
git reset --soft 'HEAD^'
Świetnie sprawdza się cofnięcie ostatniego lokalnego commita!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-21 20:13:34
Wystarczy go zresetować wykonując poniższą komendę używając git
:
git reset --soft HEAD~1
Wyjaśnij: co robi git reset
, jest to w zasadzie reset
do każdego commita, do którego chcesz wrócić, wtedy jeśli połączysz go z --soft
kluczem, to powróci, ale zachowasz zmiany w Twoich plikach, więc wrócisz do etapu, na którym plik został dodany, HEAD
jest głową gałęzi i jeśli połączysz się z ~1
(w tym przypadku użyjesz również HEAD^
), powróci tylko jeden commit, który chcesz...
I Utwórz kroki na poniższym obrazku, aby uzyskać więcej szczegółów, w tym wszystkie kroki, które mogą się wydarzyć w rzeczywistych sytuacjach i zatwierdzić kod:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-27 12:46:34
Jak cofnąć ostatni commit Git?
Aby przywrócić wszystko do stanu sprzed ostatniego commita, musimy zresetować do commita przed HEAD.
-
Jeśli nie chcesz zachować wprowadzonych zmian:
git reset --hard HEAD^
-
Jeśli chcesz zachować swoje zmiany:
git reset --soft HEAD^
Teraz sprawdź swój git log. Pokaże, że nasz ostatni commit został usunięty.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-25 08:14:01
"Zresetuj działające drzewo do ostatniego commita"
git reset --hard HEAD^
"Wyczyść nieznane pliki z drzewa roboczego"
git clean
See - Git Quick Reference
Uwaga: to polecenie usunie poprzedni commit, więc używaj go ostrożnie! Jest bezpieczniejsze.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-13 16:39:46
Użyj reflog, aby znaleźć poprawny stan
git reflog
REFLOG PRZED RESETEM
Wybierz poprawny reflog (w moim przypadku f3cb6e2) i wpisz
git reset --hard f3cb6e2
Po tym nagłówku repo zostanie zresetowany do tego nagłówka LOG PO RESECIE
Wreszcie reflog wygląda jak na poniższym obrazku
REFLOG FINAL
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-06 22:34:06
Pierwszy bieg:
git reflog
Pokaże Ci wszystkie możliwe działania, które wykonałeś w repozytorium, na przykład commit, merge, pull, itp.
To zrób:
git reset --hard ActionIdFromRefLog
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-24 09:33:20
Cofnij ostatni commit:
git reset --soft HEAD^
lub git reset --soft HEAD~
To cofnie ostatni commit.
Tutaj --soft
oznacza reset do inscenizacji.
HEAD~
lub HEAD^
oznacza przejście do commit przed głową.
Zastąp ostatni commit nowym commitem:
git commit --amend -m "message"
Zastąpi ostatni commit nowym commitem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-13 22:05:20
Inny sposób:
Sprawdź gałąź, którą chcesz przywrócić, a następnie zresetuj lokalną kopię roboczą z powrotem do commita, który chcesz być najnowszym na zdalnym serwerze (wszystko po nim przejdzie do pa-pa). Aby to zrobić, w SourceTree kliknąłem prawym przyciskiem myszy i wybrałem "Resetuj nazwę gałęzi do tego commita".
Następnie przejdź do katalogu lokalnego repozytorium i uruchom polecenie:
git -c diff.mnemonicprefix=false -c core.quotepath=false push -v -f --tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME
Spowoduje to usunięcie wszystkich commitów po bieżącym w lokalnym repozytorium, ale tylko dla tej jednej gałęzi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-24 09:34:21
Wpisz git log
i znajdź ostatni kod skrótu zatwierdzania, a następnie wpisz:
git reset <the previous co>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-24 09:34:18
W moim przypadku przypadkowo popełniłem kilka plików, których nie chciałem. Więc zrobiłem co następuje i zadziałało:
git reset --soft HEAD^
git rm --cached [files you do not need]
git add [files you need]
git commit -c ORIG_HEAD
Zweryfikuj wyniki używając gitk lub Git log --stat
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-24 09:34:09
Proste, Uruchom to w linii poleceń:
git reset --soft HEAD~
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-18 21:58:33
Istnieją dwa główne scenariusze
Nie wcisnąłeś jeszcze commita
Jeśli problemem były dodatkowe pliki, które przekazałeś (a nie chcesz, aby były w repozytorium), możesz je usunąć używając git rm
, a następnie komentując za pomocą --amend
git rm <pathToFile>
Możesz również usunąć całe katalogi za pomocą -r
, a nawet połączyć je z innymi poleceniami Bash
git rm -r <pathToDirectory>
git rm $(find -name '*.class')
Po usunięciu plików Możesz zatwierdzić, używając opcji --amend
git commit --amend -C HEAD # the -C option is to use the same commit message
To będzie przepisz swój ostatni commit lokalny usuwając dodatkowe pliki, więc te pliki nigdy nie zostaną wysłane na push, a także zostaną usunięte z lokalnego .repozytorium git by GC.
Już nacisnąłeś commit
Możesz zastosować to samo rozwiązanie w innym scenariuszu, a następnie wykonać git push
z opcją -f
, ale jest to nie zalecane, ponieważ nadpisuje zdalną historię z rozbieżną zmianą (może uszkodzić twoje repozytorium).
Zamiast tego, musisz zrobić commit Bez --amend
(pamiętaj o -amend': ta opcja przepisuje historię ostatniego commita).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-11 23:50:47
Dla lokalnego commita
git reset --soft HEAD~1
Lub jeśli nie pamiętasz dokładnie, w którym commicie jest, możesz użyć
git rm --cached <file>
For a pushed commit
Właściwym sposobem usuwania plików z historii repozytorium jest użycie git filter-branch
. Czyli
git filter-branch --index-filter 'git rm --cached <file>' HEAD
Ale zalecam uważne używanie tego polecenia. Czytaj więcej na strona podręcznika Git-filter-branch(1) .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-21 20:15:08
Aby zresetować poprzednią wersję, trwale usuwając wszystkie niezatwierdzone zmiany:
git reset --hard HEAD~1
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-16 07:25:01
Istnieje wiele sposobów, aby to zrobić:
Polecenie Git cofające ostatni commit / poprzedni commit:
Ostrzeżenie: nie używaj --hard, jeśli nie wiesz, co robisz. -- trudne jest zbyt niebezpieczne i może usunąć Twoje pliki.
Podstawowe polecenie do przywrócenia commita w Git to:
$ git reset --hard <COMMIT -ID>
Lub
$ git reset --hard HEAD~<n>
COMMIT-ID : ID dla commita
N: jest liczbą ostatnich commitów, które chcesz revert
Możesz uzyskać identyfikator zatwierdzenia jak pokazano poniżej:
$ **git log --oneline**
d81d3f1 function to subtract two numbers
be20eb8 function to add two numbers
bedgfgg function to mulitply two numbers
Gdzie d81d3f1 i be20eb8 są identyfikatorami zmian.
Teraz zobaczmy kilka przypadków:
Załóżmy, że chcesz przywrócić ostatni commit 'd81d3f1'. Oto dwie opcje:
$ git reset --hard d81d3f1
Lub
$ git reset --hard HEAD~1
Załóżmy, że chcesz przywrócić commit 'be20eb8':
$ git reset --hard be20eb8
Aby uzyskać bardziej szczegółowe informacje, możesz odwołać się i wypróbować kilka innych poleceń Resetowanie głowicy do określonego stanu:
$ git reset --help
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-19 14:00:16