Jak cofnąć" git commit --amend "zrobione zamiast" git commit"
Przypadkowo zmieniłem poprzedni commit. Commit powinien być oddzielony, aby zachować historię zmian, które wprowadziłem do danego pliku.
Czy istnieje sposób na cofnięcie ostatniego commita? Jeśli zrobię coś takiego jak git reset --hard HEAD^
, pierwszy commit również zostanie cofnięty.
(nie wcisnąłem jeszcze żadnych zdalnych katalogów)
9 answers
Musisz utworzyć nowy commit z tymi samymi szczegółami co bieżący HEAD
commit, ale z rodzicem jak poprzednia wersja HEAD
. git reset --soft
przesunie wskaźnik gałęzi tak, aby następny commit pojawił się na innym commicie niż obecny.
# Move the current head so that it's pointing at the old commit
# Leave the index intact for redoing the commit.
# HEAD@{1} gives you "the commit that HEAD pointed at before
# it was moved to where it currently points at". Note that this is
# different from HEAD~1, which gives you "the commit that is the
# parent node of the commit that HEAD is currently pointing to."
git reset --soft HEAD@{1}
# commit the current tree using the commit details of the previous
# HEAD commit. (Note that HEAD@{1} is pointing somewhere different from the
# previous command. It's now pointing at the erroneously amended commit.)
git commit -C 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
2015-12-17 04:43:13
Użyj ref-log :
git branch fixing-things HEAD@{1}
git reset fixing-things
Wtedy powinieneś mieć wszystkie wcześniej zmienione zmiany tylko w swojej kopii roboczej i można zatwierdzić ponownie
Aby zobaczyć pełną listę poprzednich indeksów wpisz git reflog
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
2009-09-22 10:14:20
Znajdź zmienione commity przez:
git log --reflog
Uwaga: możesz dodać --patch
, aby zobaczyć treść commitów dla jasności. Tak samo jak git reflog
.
Następnie zresetuj głowę do poprzedniego commita w punkcie, w którym było dobrze przez:
git reset SHA1 --hard
Uwaga: Zastąp SHA1 Twoim rzeczywistym Hashem commit. Zauważ również, że to polecenie spowoduje utratę wszelkich niezatwierdzonych zmian, więc możesz je wcześniej ukryć. Zamiast tego należy użyć --soft
.
Następnie cherry-wybierz drugą commit, którego potrzebujesz na górze:
git cherry-pick SHA1
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-21 03:55:37
Zawsze możesz podzielić commit, Z instrukcji
- Uruchom interaktywny rebase z git rebase-I commit^, gdzie commit jest zatwierdzeniem, które chcesz podzielić. W rzeczywistości każdy zakres commitów wystarczy, o ile zawiera ten commit.
- zaznacz commit, który chcesz podzielić akcją "edytuj".
- jeśli chodzi o edycję tego commita, wykonaj GIT reset HEAD^. Efekt polega na tym, że głowica jest przewijana o jeden, A Indeks podąża za nim. Jednak drzewo robocze pozostaje bez zmian.
- Dodaj teraz zmiany do indeksu, które chcesz mieć w pierwszym zatwierdzeniu. W tym celu możesz użyć git add (ewentualnie interaktywnie) lub git-gui (lub obu).
- Zatwierdź indeks now-current z dowolnym Komunikatem zatwierdzającym.
- powtórz dwa ostatnie kroki, aż drzewo robocze będzie czyste.
- Kontynuuj rebase używając git rebase --continue.
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
2009-09-22 10:01:22
Maybe can use git reflog
to get two commit before amend i after amend.
Następnie użyj git diff before_commit_id after_commit_id > d.diff
, Aby uzyskać diff pomiędzy przed poprawką a po poprawce.
Następnie użyj git checkout before_commit_id
, aby powrócić do przed zatwierdzeniem
I ostatnie użycie git apply d.diff
do zastosowania prawdziwej zmiany, którą dokonałeś.
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-01-19 07:34:51
Być może warto zauważyć, że jeśli nadal jesteś w edytorze z Komunikatem o zatwierdzeniu, możesz go usunąć i spowoduje to przerwanie polecenia git commit --amend
.
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-03 18:45:09
Możesz zrobić poniżej, aby cofnąć "git commit-amend"
- $ Git reset --soft HEAD^
- $ git checkout files_from_old_commit_on_branch
- $ git pull origin your_branch_name
====================================
Teraz Twoje zmiany są jak poprzednie. Koniec z cofaniem dla " git commit-amend" Teraz możesz zrobić "git push origin", aby wcisnąć do 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
2018-06-25 11:46:23
Prawie 9 lat później, ale nie widziałem tej odmiany, o której wspomniano (to rodzaj kombinacji kilku z nich, podobnej do top answer ( https://stackoverflow.com/a/1459264/4642530).
Wyszukaj wszystkie wolnostojące głowy na gałęzi
git reflog show origin/BRANCH_NAME --date=relative
Następnie znajdź hash SHA1
Reset do starego SHA1
git reset --hard SHA1
Następnie odepchnij go z powrotem. w górę.
git push origin BRANCH_NAME
Załatwione.
To całkowicie przywróci ci Stary commit.(wraz z datą wcześniejszego nadpisania oddzielnej głowicy 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
2018-06-17 21:55:20
-
Checkout do tymczasowej gałęzi z ostatnim zatwierdzeniem
git branch temp HEAD@{1}
-
Resetuj ostatni commit
git reset temp
-
Teraz będziesz mieć wszystkie pliki, które zatwierdzisz, jak również poprzedni commit. Sprawdź status wszystkich plików.
git status
-
Zresetuj pliki commitów z git stage.
git reset myfile1.js
(tak dalej) -
Reattach this commit
git commit -C HEAD@{1}
Dodaj i zatwierdź swoje pliki do nowego zatwierdzenia.
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-03-04 07:28:58