Napisałem niewłaściwą wiadomość w komunikacie zatwierdzenia.
Jak mogę zmienić wiadomość? Zatwierdzenie nie zostało jeszcze wypchnięte.
Napisałem niewłaściwą wiadomość w komunikacie zatwierdzenia.
Jak mogę zmienić wiadomość? Zatwierdzenie nie zostało jeszcze wypchnięte.
Odpowiedzi:
git commit --amend
otworzy edytor, umożliwiając zmianę komunikatu zatwierdzenia ostatniego zatwierdzenia. Dodatkowo możesz ustawić komunikat zatwierdzenia bezpośrednio w wierszu poleceń za pomocą:
git commit --amend -m "New commit message"
… Może to jednak sprawić, że wprowadzanie wielu wierszy lub małych poprawek stanie się trudniejsze.
Upewnij się, że nie ma żadnych zmian w pracy kopiowania wystawił przed wykonaniem tego czy będą one uzyskać popełnił zbyt. ( Nieustalone zmiany nie zostaną zatwierdzone ).
Jeśli już wypchnąłeś swoje zatwierdzenie do zdalnego oddziału, to po lokalnej zmianie zatwierdzenia (jak opisano powyżej) - będziesz musiał również wymusić wypchnięcie zatwierdzenia za pomocą:
git push <remote> <branch> --force
# Or
git push <remote> <branch> -f
Ostrzeżenie: wymuszone zastąpienie zdalnej gałęzi stanem twojego lokalnego . Jeśli istnieją commity na pilocie zdalnego oddziału, który nie ma w swoim lokalnym oddziale, to będzie tracić te rewizje.
Ostrzeżenie: zachowaj ostrożność przy wprowadzaniu zmian, które już udostępniasz innym osobom. Zmiana zatwierdza zasadniczo przepisuje je na różne identyfikatory SHA , co stanowi problem, jeśli inne osoby mają kopie starego zatwierdzenia, które przepisałeś. Każdy, kto ma kopię starego zatwierdzenia, będzie musiał zsynchronizować swoją pracę z nowo przepisanym zatwierdzeniem, co czasem może być trudne, więc upewnij się, że koordynujesz z innymi podczas próby przepisania wspólnej historii zatwierdzeń lub po prostu unikniesz przepisywania wspólnych zatwierdzeń całkowicie.
Inną opcją jest użycie interaktywnego rebase. Umożliwia to edycję dowolnej wiadomości, którą chcesz zaktualizować, nawet jeśli nie jest to najnowsza wiadomość.
Aby wykonać squash Git, wykonaj następujące kroki:
// n is the number of commits up to the last commit you want to be able to edit
git rebase -i HEAD~n
Gdy zmiażdżysz swoje zobowiązania - wybierz e/r
do edycji wiadomość:
Podczas używania git rebase -i HEAD~n
może być więcej niż n zatwierdzeń. Git „zbierze” wszystkie zatwierdzenia z ostatnich n zatwierdzeń, a jeśli gdzieś pomiędzy tym zakresem nastąpiło scalenie, zobaczysz również wszystkie zatwierdzenia, więc wynikiem będzie n +.
Jeśli musisz to zrobić dla więcej niż jednego oddziału, a podczas modyfikowania treści możesz napotkać konflikty, skonfiguruj git rerere
i pozwól Gitowi automatycznie rozwiązać te konflikty.
git commit --amend
nie jest tak potężny jak git rebase -i
.
git commit --amend
można naprawić (a?) Master commit.
git push -f origin branchname
git push -f
jest trochę niebezpieczny, jeśli inne osoby korzystają z tego samego repozytorium?
git commit --amend -c HEAD
. Spowoduje to otwarcie edytora wstępnie wypełnionego starym komunikatem zatwierdzenia, aby można go było zmienić.
git commit --amend -m "your new message"
Jeśli zatwierdzenie, które chcesz naprawić, nie jest najnowsze:
git rebase --interactive $parent_of_flawed_commit
Jeśli chcesz naprawić kilka wadliwych zatwierdzeń, przekaż element nadrzędny najstarszego z nich.
Pojawi się edytor z listą wszystkich zatwierdzeń od tego, który podałeś.
pick
na reword
(lub na starsze wersje Git, na edit
) przed wszelkimi zatwierdzeniami, które chcesz naprawić.Za każdym zatwierdzeniem, które chcesz przeredagować , Git przeniesie Cię z powrotem do edytora. Dla każdego zatwierdzenia, które chcesz edytować , Git umieszcza cię w powłoce. Jeśli jesteś w powłoce:
git commit --amend
git rebase --continue
Większość tej sekwencji zostanie wyjaśniona na podstawie danych wyjściowych różnych poleceń. To jest bardzo łatwe; nie musisz go zapamiętywać - pamiętaj tylko, że git rebase --interactive
pozwala to korygować zatwierdzenia bez względu na to, jak dawno temu były.
Pamiętaj, że nie będziesz chciał zmieniać zatwierdzeń, które już wypchnąłeś. A może robisz to, ale w takim przypadku będziesz musiał bardzo uważnie komunikować się ze wszystkimi, którzy mogli wywiązać się z twoich zobowiązań i wykonali nad nimi pracę. Jak mogę odzyskać / ponownie zsynchronizować po tym, jak ktoś przekaże bazę lub reset do opublikowanej gałęzi?
reword
zamiast pick
edytować komunikat w dzienniku.
$parent_of_flawed_commit
jest równoważne z $flawed_commit^
.
-p
( --preserve-merges
), jeśli po wadliwym zatwierdzeniu nastąpiło scalenie.
Aby zmienić poprzednie zatwierdzenie, wprowadź odpowiednie zmiany i wprowadź zmiany, a następnie uruchom
git commit --amend
Spowoduje to otwarcie pliku w edytorze tekstu reprezentującym nową wiadomość zatwierdzenia. Zaczyna się od tekstu ze starej wiadomości zatwierdzenia. Zmień komunikat zatwierdzenia, jak chcesz, a następnie zapisz plik i zamknij edytor, aby zakończyć.
Aby zmienić poprzednie zatwierdzenie i zachować ten sam komunikat dziennika, uruchom
git commit --amend -C HEAD
Aby naprawić poprzednie zatwierdzenie, usuwając je całkowicie, uruchom
git reset --hard HEAD^
Jeśli chcesz edytować więcej niż jedną wiadomość zatwierdzenia, uruchom
git rebase -i HEAD~commit_count
(Zastąp licznik zatwierdzeń liczbą zatwierdzeń, które chcesz edytować.) To polecenie uruchamia edytor. Oznacz pierwszy zatwierdzenie (ten, który chcesz zmienić) jako „edytuj” zamiast „wybierz”, a następnie zapisz i zamknij edytor. Wprowadź zmiany, które chcesz zatwierdzić, a następnie uruchom
git commit --amend
git rebase --continue
Uwaga: Możesz także „Dokonać żądanej zmiany” z edytora otwartego przez git commit --amend
git rebase -i HEAD~commit_count
pozwoli również na zmianę komunikatów zatwierdzenia dowolnej wybranej liczby zatwierdzeń. Po prostu zaznacz wybrane zatwierdzenia jako „przeredaguj” zamiast „wybierz”.
git reset --hard
niszczy niezatwierdzone zmiany. Proszę wymienić --hard
z --soft
.
git reset --hard
jest całkowicie uzasadnionym poleceniem, ale jest mylące, biorąc pod uwagę pytanie. Używasz --hard
, jeśli dokonałeś zmian, które chcesz wyrzucić, a nie, jeśli popełniłeś literówkę w komunikacie zatwierdzenia!
Jak już wspomniano, git commit --amend
jest to sposób na zastąpienie ostatniego zatwierdzenia. Jedna uwaga: jeśli chcesz również zastąpić pliki , polecenie brzmi:
git commit -a --amend -m "My new commit message"
git add file.ext
to po prostugit commit --amend
Możesz również użyć git filter-branch
do tego.
git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD
To nie jest tak proste, jak banalne git commit --amend
, ale jest szczególnie przydatne, jeśli masz już kilka scaleń po błędnym komunikacie zatwierdzenia.
Zauważ, że to spróbuje przepisać każde zatwierdzenie pomiędzy HEAD
i błędne zatwierdzenie, więc powinieneś msg-filter
bardzo mądrze wybrać swoje polecenie ;-)
$flawed_commit^..HEAD
nie $flawed_commit..HEAD
. jak podano na stronie podręcznika: « Polecenie spowoduje przepisanie tylko dodatnich referencji wymienionych w wierszu poleceń (np. jeśli przejdziesz a..b, tylko b zostanie przepisane). »
Wolę w ten sposób:
git commit --amend -c <commit ID>
W przeciwnym razie pojawi się nowe zatwierdzenie z nowym identyfikatorem zatwierdzenia.
-c
Robi kilka rzeczy. Domyślnie korzysta ze starej wiadomości, ale kopiuje również informacje o autorze (osoba i czas). -C
robi to samo, ale nie prosi o edycję wiadomości.
fatal: Option -m cannot be combined with -c/-C/-F/--fixup.
Jeśli używasz narzędzia Git GUI, jest przycisk o nazwie Amend ostatnie zatwierdzenie . Kliknij ten przycisk, aby wyświetlić ostatnie pliki zatwierdzeń i wiadomości. Po prostu edytuj tę wiadomość, a możesz zatwierdzić ją za pomocą nowej wiadomości zatwierdzenia.
Lub użyj tego polecenia z konsoli / terminala:
git commit -a --amend -m "My new commit message"
Możesz użyć Git rebasing . Na przykład, jeśli chcesz zmodyfikować z powrotem, aby zatwierdzić bbc643cd, uruchom
$ git rebase bbc643cd^ --interactive
W domyślnym edytorze zmodyfikuj „pick”, aby „edit” w wierszu, którego zatwierdzenie chcesz zmodyfikować. Wprowadź zmiany, a następnie wprowadź je za pomocą
$ git add <filepattern>
Teraz możesz użyć
$ git commit --amend
zmodyfikować zatwierdzenie, a następnie
$ git rebase --continue
aby powrócić do poprzedniego zatwierdzenia głowy.
git commit --amend
wpłynęła, możesz jej użyć git show
i wyświetli nową wiadomość.
Jeśli chcesz zmodyfikować tylko ostatnią wiadomość zatwierdzenia, wykonaj następujące czynności:
git commit --amend
Spowoduje to umieszczenie cię w edytorze tekstu i zmianę ostatniej wiadomości zatwierdzenia.
Jeśli chcesz zmienić trzy ostatnie popełnić wiadomości, czy którekolwiek z popełnić wiadomości do tego momentu, dostawa HEAD~3
do git rebase -i
polecenia:
git rebase -i HEAD~3
git commit --amend
, a także mówi, że można użyć git rebase -i HEAD~commit_count
, wszystko co zrobiłem było podłączyć 3
do commit_count
.
Jeśli musisz zmienić stary komunikat zatwierdzenia w wielu gałęziach (tj. Zatwierdzenie z błędnym komunikatem jest obecne w wielu gałęziach), możesz użyć:
git filter-branch -f --msg-filter \
'sed "s/<old message>/<new message>/g"' -- --all
Git utworzy tymczasowy katalog do przepisywania i dodatkowo archiwizuje stare odniesienia refs/original/
.
-f
wymusi wykonanie operacji. Jest to konieczne, jeśli katalog tymczasowy jest już obecny lub jeśli istnieją już odwołania w nim przechowywane refs/original
. Jeśli tak nie jest, możesz upuścić tę flagę.
--
oddziela opcje gałęzi filtrów od opcji wersji.
--all
upewni się, że wszystkie gałęzie i tagi są przepisane.
Ze względu na kopię zapasową starych odniesień możesz łatwo wrócić do stanu przed wykonaniem polecenia.
Powiedzmy, że chcesz odzyskać swojego mistrza i uzyskać do niego dostęp w oddziale old_master
:
git checkout -b old_master refs/original/refs/heads/master
git commit --amend
naprawić uwag lub dodać pliki zapomniałem git add
, ale tylko kiedykolwiek wcześniej mam git push
ed. Używam również, git filter-branch
gdy chcę całkowicie zepsuć historię wersji, ale OP tego nie chce, więc ta odpowiedź wymaga dużego ostrzeżenia zdrowotnego - nie próbuj tego w domu, podglądacze !!
Posługiwać się
git commit --amend
Aby to szczegółowo zrozumieć, doskonałym postem jest 4. Przepisywanie historii Git . Mówi także o tym, kiedy nie należy używać git commit --amend
.
git commit --amend
Odpowiedź została już podana (kilka razy), zanim napisał swoją. Dlaczego opublikowałeś go ponownie? Jeśli chcesz dodać link do „Przepisywanie historii Gitów”, możesz edytować jedną z istniejących odpowiedzi lub zostawić komentarz.
Masz tutaj kilka opcji. Możesz to zrobić
git commit --amend
pod warunkiem, że jest to twój ostatni zatwierdzenie.
W przeciwnym razie, jeśli nie jest to twoje ostatnie zatwierdzenie, możesz zrobić interaktywną bazę,
git rebase -i [branched_from] [hash before commit]
Następnie w interaktywnej bazie dodajesz edycję do tego zatwierdzenia. Kiedy się pojawi, wykonaj a git commit --amend
i zmodyfikuj komunikat zatwierdzenia. Jeśli chcesz wycofać zmiany przed tym punktem zatwierdzenia, możesz także użyć git reflog
i po prostu usunąć ten zatwierdzenie. Potem po prostu zrób git commit
ponownie.
Jeśli jest to twoje ostatnie zatwierdzenie, po prostu popraw zatwierdzenie:
git commit --amend -o -m "New commit message"
(Używając flagi -o
( --only
), aby upewnić się, że zmienisz tylko komunikat zatwierdzenia)
Jeśli jest to ukryte zatwierdzenie, skorzystaj z niesamowitej interaktywnej bazy :
git rebase -i @~9 # Show the last 9 commits in a text editor
Znajdź żądane zatwierdzenie, zmień pick
na r
( reword
) oraz zapisz i zamknij plik. Gotowy!
Samouczek miniaturowego Vima (lub, jak wykonać bazowanie za pomocą tylko 8 naciśnięć klawiszy 3j
cw
r
EscZZ
):
vimtutor
jeśli masz czash
j
k
l
odpowiadają klawiszom ruchu ←↓↑→3j
Przesuwa się o trzy linie w dółi
wejść w tryb wstawiania - wpisany tekst pojawi się w plikuc
wyjść z trybu wstawiania i powrócić do trybu „normalnego”u
cofnąćr
zrobić ponowniedd
, dw
, dl
Aby usunąć linię, słowo lub list, odpowiedniocc
, cw
, cl
Aby zmienić linię, słowo lub list, odpowiednio (jak dd
i
)yy
, yw
, yl
Aby skopiować ( „yank”) linię, słowo lub list, odpowiedniop
lub P
wkleić odpowiednio po bieżącej pozycji lub przed nią:w
Enter zapisać (zapisać) plik:q!
Enter wyjść bez zapisywania:wq
Enterlub ZZ
zapisać i wyjśćJeśli często edytujesz tekst, przełącz się na układ klawiatury Dvorak , naucz się pisać na klawiaturze i naucz się Vima. Czy warto? Tak.
ProTip ™: Nie bój się eksperymentować z „niebezpiecznymi” poleceniami, które przepisują historię * - Git domyślnie nie usuwa twoich zobowiązań przez 90 dni; możesz je znaleźć w reflog:
$ git reset @~3 # Go back three commits
$ git reflog
c4f708b HEAD@{0}: reset: moving to @~3
2c52489 HEAD@{1}: commit: more changes
4a5246d HEAD@{2}: commit: make important changes
e8571e4 HEAD@{3}: commit: make some changes
... earlier commits ...
$ git reset 2c52489
... and you're back where you started
* Uważaj na opcje takie jak --hard
i --force
chociaż - mogą odrzucać dane.
* Nie zapisuj także historii oddziałów, z którymi współpracujesz.
nano
? Mówimy o trywialnych modyfikacjach, które należy wprowadzić w pliku tekstowym, a nie o hardcorowym kodowaniu, które wywołałoby wojnę o „najlepszy” edytor tekstu.
ddjjpZZ
Przesuwa 2 zatwierdzenie w dół. W podstawowej wiedzy Vima nie ma nic tajemniczego; potrzeba 10 minut, aby poczuć się bardziej komfortowo z Vimem niż z nano.
Jeśli używasz Git GUI, możesz zmienić ostatnie zatwierdzenie, które nie zostało wypchnięte za pomocą:
Commit/Amend Last Commit
Używam GUI Git tak często, jak to możliwe, a to daje ci możliwość zmiany ostatniego zatwierdzenia:
Ponadto, git rebase -i origin/master
jest to ładna mantra, która zawsze przedstawi ci zobowiązania, które wykonałeś na szczycie mistrza, i da ci możliwość zmiany, usunięcia, zmiany kolejności lub zgniecenia. Najpierw nie musisz zdobywać tego skrótu.
Wow, więc jest na to wiele sposobów.
Jeszcze innym sposobem na to jest usunięcie ostatniego zatwierdzenia, ale zachowaj jego zmiany, abyś nie stracił pracy. Następnie możesz wykonać kolejne zatwierdzenie z poprawioną wiadomością. To mogłoby wyglądać mniej więcej tak:
git reset --soft HEAD~1
git commit -m 'New and corrected commit message'
Zawsze tak robię, jeśli zapomnę dodać plik lub dokonać zmiany.
Pamiętaj, aby podać --soft
zamiast--hard
, inaczej stracisz to zatwierdzenie całkowicie.
git commit --amend
z wyjątkiem tego, że jest to proces dwuetapowy.
--amend
zachowa informacje o autorze, ale pytanie dotyczy jedynie zmiany wiadomości.
Wszystkim, którzy szukają GUI dla Windows / Mac, aby pomóc w edycji starszych wiadomości (tj. Nie tylko najnowszych), polecam Sourcetree . Kroki, które należy wykonać, są poniżej.
W przypadku zatwierdzeń, które nie zostały jeszcze przekazane do pilota:
Unable to create 'project_path/.git/index.lock': File exists.
gdy próbowałem modyfikować wiele komunikatów zatwierdzania jednocześnie. Nie jestem pewien, na czym dokładnie polega problem, ani czy zostanie to naprawione w przyszłej wersji Sourcetree, ale jeśli tak się stanie, zaleca się ponowne ich rozwiązywanie (wolniej, ale wydaje się bardziej niezawodne).... Lub ... dla zatwierdzeń, które zostały już wypchnięte:
Postępuj zgodnie z krokami w tej odpowiedzi , które są podobne do powyższych, ale wymagają uruchomienia kolejnego polecenia z wiersza poleceń ( git push origin <branch> -f
) w celu wymuszenia przesunięcia gałęzi. Polecam przeczytać wszystko i zachować niezbędną ostrożność!
Jeśli chcesz po prostu edytować najnowsze zatwierdzenie, użyj:
git commit --amend
lub
git commit --amend -m 'one line message'
Ale jeśli chcesz edytować kilka zatwierdzeń z rzędu, powinieneś zamiast tego użyć zmiany zasad:
git rebase -i <hash of one commit before the wrong commit>
W pliku, takim jak powyższy, napisz edit/e
lub jedną z pozostałych opcji, a następnie naciśnij Zapisz i wyjdź.
Teraz będziesz przy pierwszym błędnym zatwierdzeniu. Wprowadź zmiany w plikach, a zostaną one automatycznie ustawione dla Ciebie. Rodzaj
git commit --amend
Zapisz i zamknij to i wpisz
git rebase --continue
aby przejść do następnej selekcji, aż do zakończenia wszystkich wybranych opcji.
Zauważ, że te rzeczy zmieniają wszystkie twoje skróty SHA po tym konkretnym zatwierdzeniu.
Jeśli chcesz zmienić tylko ostatnią wiadomość, powinieneś użyć --only
flagi lub jej skrótu za -o
pomocącommit --amend
:
git commit --amend -o -m "New commit message"
Zapewnia to, że przypadkowo nie poprawisz zatwierdzenia za pomocą inscenizacji. Oczywiście najlepiej mieć odpowiednią $EDITOR
konfigurację. Następnie możesz pominąć tę -m
opcję, a Git wstępnie wypełni komunikat zatwierdzenia starym. W ten sposób można go łatwo edytować.
git commit --amend
. Pytanie było bardzo szczegółowe, dlatego dłuższe! = Lepsze. Decydujące wzmiankowanie -o
flagi prawdopodobnie zostanie zakopane w pozostałej części informacji. Nie lubię też redagować odpowiedzi, która ma już tyle głosów.
--only
opcja z --amend
jest dostępna od wersji 1.3.0 git, nie działała poprawnie, dopóki nie została naprawiona w wersji 1.7.11.3 ( ea2d4ed35902ce15959965ab86d80527731a177c ). Więc prawidłowa odpowiedź z powrotem w 2008 roku prawdopodobnie byłby coś takiego: git stash; git commit --amend; git stash pop
.
Zaktualizuj swój ostatni zły komunikat zatwierdzenia o nowy komunikat zatwierdzenia w jednym wierszu:
git commit --amend -m "your new commit message"
Lub spróbuj zresetować Git jak poniżej:
# You can reset your head to n number of commit
# NOT a good idea for changing last commit message,
# but you can get an idea to split commit into multiple commits
git reset --soft HEAD^
# It will reset you last commit. Now, you
# can re-commit it with new commit message.
git reset
może pomóc ci również rozbić jeden zatwierdzenie na wiele zatwierdzeń:
# Reset your head. I am resetting to last commits:
git reset --soft HEAD^
# (You can reset multiple commit by doing HEAD~2(no. of commits)
# Now, reset your head for splitting it to multiple commits
git reset HEAD
# Add and commit your files separately to make multiple commits: e.g
git add app/
git commit -m "add all files in app directory"
git add config/
git commit -m "add all files in config directory"
Tutaj pomyślnie podzieliłeś swój ostatni zatwierdzenie na dwa zatwierdzenia.
git commit --amend
, dokładnie tak, jak napisano w najczęściej głosowanej odpowiedzi . Dodatkowo git reset --soft HEAD^
działa identycznie jak miękki reset w tej wcześniejszej odpowiedzi , ponieważ oba resetują z powrotem do pierwszego zatwierdzenia nadrzędnego.
git reset
do rozwiązania, aby dać pomysł na podzielenie jednego komunikatu zatwierdzenia na wiele komunikatów zatwierdzenia. Ponieważ napotkałem ten problem, kiedy zaczynałem używać git
. Czasami może to być naprawdę pomocne. :)
Na to pytanie jest wiele odpowiedzi, ale żadna z nich nie wyjaśnia bardzo szczegółowo, jak zmieniać starsze komunikaty zatwierdzania za pomocą Vima . Utknąłem, próbując to zrobić sam, więc tutaj opiszę szczegółowo, jak to zrobiłem, szczególnie dla osób, które nie mają doświadczenia w Vimie!
Chciałem zmienić pięć ostatnich zatwierdzeń, które już wypchnąłem na serwer. Jest to dość „niebezpieczne”, ponieważ jeśli ktoś już z tego wyciągnął, możesz zepsuć wszystko, zmieniając komunikaty zatwierdzania. Jednak gdy pracujesz nad własną małą gałęzią i jesteś pewien, że nikt jej nie pociągnął, możesz to zmienić w następujący sposób:
Powiedzmy, że chcesz zmienić pięć ostatnich zatwierdzeń, a następnie wpisz to w terminalu:
git rebase -i HEAD~5
* Gdzie 5 to liczba komunikatów zatwierdzenia, które chcesz zmienić (więc jeśli chcesz zmienić od 10 do ostatniego zatwierdzenia, wpisz 10).
To polecenie przeniesie Cię do Vima, gdzie możesz „edytować” swoją historię zatwierdzeń. Na górze zobaczysz pięć ostatnich zmian:
pick <commit hash> commit message
Zamiast tego pick
musisz pisać reword
. Możesz to zrobić w Vimie, wpisując i
. To powoduje przejście do trybu wstawiania . (Widzisz, że jesteś w trybie wstawiania po słowie WSTAW na dole.) Aby zatwierdzić zmiany, które chcesz zmienić, wpisz reword
zamiastpick
.
Następnie musisz zapisać i zamknąć ten ekran. Robisz to, przechodząc najpierw do „trybu poleceń”, naciskając Escprzycisk (możesz sprawdzić, czy jesteś w trybie poleceń, jeśli zniknęło słowo WSTAW na dole). Następnie możesz wpisać polecenie, wpisując :
. Poleceniem zapisywania i wychodzenia jest wq
. Więc jeśli wpiszesz :wq
, jesteś na dobrej drodze.
Następnie Vim przejrzy każdą zatwierdzoną wiadomość, którą chcesz przeredagować, i tutaj możesz faktycznie zmienić komunikaty zatwierdzenia. Zrobisz to, przechodząc do trybu wstawiania, zmieniając komunikat zatwierdzenia, przechodząc do trybu poleceń oraz zapisując i kończąc. Zrób to pięć razy, a skończysz z Vimem!
Następnie, jeśli już wypchnąłeś swoje niepoprawne zatwierdzenia, musisz git push --force
je zastąpić. Pamiętaj, że git push --force
jest to dość niebezpieczna rzecz, więc upewnij się, że nikt nie wyciągnął z serwera, ponieważ popchnąłeś swoje błędne zobowiązania!
Teraz zmieniłeś swoje komunikaty zatwierdzania!
(Jak widzisz, nie jestem zbyt doświadczony w Vimie, więc jeśli użyłem niewłaściwego „żargonu”, aby wyjaśnić, co się dzieje, możesz mnie poprawić!)
<nitpick>
Na przepełnieniu stosu nie ma „wątków”, ponieważ nie jest to forum dyskusyjne, są tylko „pytania”, „odpowiedzi” i „posty”. </nitpick>
. Ponadto, nie wszystkie wersje Vima są takie same, nie wszystkie pozwalają usuwać znaki w trybie wstawiania (ma to sens, prawda?). Jeśli chcesz zawsze móc usuwać znaki w Vimie X
i x
tak zrobisz (małe x
znaki przed kursorem, X
zostaną usunięte za). Jeśli popełnisz błąd, możesz go u
wielokrotnie użyć do cofnięcia. Wreszcie r
jest skrótem reword
od interaktywnego edytora bazy danych.
cw
wpisuje się na jego początku (choć pytanie nie dotyczy vima, zgadzam się).
nano
mmedit Midnight Commander.
Możesz użyć git-rebase-reword
Jest przeznaczony do edycji każdego zatwierdzenia (nie tylko ostatniego) w taki sam sposób jak commit --amend
$ git rebase-reword <commit-or-refname>
Jego nazwa pochodzi od akcji interaktywnej rebase w celu zmiany zatwierdzenia: „reword”. Zobacz ten post i man -section interaktywny tryb-
Przykłady:
$ git rebase-reword b68f560
$ git rebase-reword HEAD^
g c; g rb -i @~9
Wpisałbym : (zatwierdzenie i zmiana bazy), przeniesienie nowego zatwierdzenia tam, gdzie chcę, zmień commit
na f
( fixup
) i zapisz. Jeśli chcesz czegoś szybciej, możesz mieć alias git commit --fixup=<commit>; git rebase -i --autosquash <commit>^
Dodałem aliasy reci
i recm
do recommit (amend)
tego. Teraz mogę to zrobić za pomocą git recm
lub git recm -m
:
$ vim ~/.gitconfig
[alias]
......
cm = commit
reci = commit --amend
recm = commit --amend
......
Uświadomiłem sobie, że wcisnąłem commit z literówką. Aby cofnąć, wykonałem następujące czynności:
git commit --amend -m "T-1000, advanced prototype"
git push --force
Ostrzeżenie: wymuszenie wprowadzenia zmian spowoduje zastąpienie gałęzi zdalnej gałęzią lokalną. Upewnij się, że nie zastąpisz niczego, co chcesz zachować. Zachowaj także ostrożność, aby wymusić naepchnięcie poprawionego (przepisanego) zatwierdzenia, jeśli ktokolwiek inny udostępnia Ci gałąź, ponieważ będzie musiał przepisać własną historię, jeśli ma starą kopię zatwierdzenia, którą właśnie przepisałeś.
Lubię używać następujących:
git status
git add --all
git commit -am "message goes here about the change"
git pull <origin master>
git push <origin master>
Jeśli nie przekazałeś kodu do zdalnej gałęzi ( GitHub / Bitbucket ), możesz zmienić komunikat zatwierdzenia w wierszu poleceń, jak poniżej.
git commit --amend -m "Your new message"
Jeśli pracujesz nad konkretnym oddziałem, zrób to:
git commit --amend -m "BRANCH-NAME: new message"
Jeśli już wypchnąłeś kod z niewłaściwą wiadomością, i musisz zachować ostrożność przy zmianie wiadomości. Oznacza to, że po zmianie komunikatu zatwierdzenia i ponownym wypchnięciu go, masz problemy. Aby wygładzić, wykonaj następujące kroki.
Przeczytaj całą moją odpowiedź, zanim to zrobisz.
git commit --amend -m "BRANCH-NAME : your new message"
git push -f origin BRANCH-NAME # Not a best practice. Read below why?
Ważna uwaga: użycie bezpośredniego wymuszania może spowodować problemy z kodem, które inni programiści pracują nad tym samym oddziałem. Aby uniknąć tych konfliktów, musisz wyciągnąć kod z gałęzi, zanim wymusisz wypchnięcie :
git commit --amend -m "BRANCH-NAME : your new message"
git pull origin BRANCH-NAME
git push -f origin BRANCH-NAME
Jest to najlepsza praktyka przy zmianie komunikatu zatwierdzenia, jeśli został już wypchnięty.