it-swarm-eu.dev

Jak upravit existující, nepotvrzené zprávy o potvrzení?

Napsal jsem špatnou věc do zprávy.

Jak mohu změnit zprávu? Tento příkaz ještě nebyl zatlačen.

7673
Laurie Young

Změna poslední zprávy o potvrzení

git commit --amend

otevře editor, který vám umožní změnit zprávu o potvrzení posledního potvrzení. Můžete také nastavit zprávu potvrzení přímo v příkazovém řádku s:

git commit --amend -m "New commit message"

… Nicméně, toto může dělat multi-řádkové potvrzovací zprávy nebo malé opravy více těžkopádný vstoupit.

Ujistěte se, že nemáte žádné změny v pracovní kopii staged předtím, než tak učiníte, nebo se vám také dostanou. (Nestabilní změny nebudou potvrzeny.)

Změna zprávy o závazku, který jste již posunuli do vzdálené větve

Pokud jste již svůj závazek posunuli do vzdálené větve, musíte nutit Push Push commit s:

git Push <remote> <branch> --force
# Or
git Push <remote> <branch> -f

Varování: vynucení síly přepíše vzdálenou větev stavem vašeho lokálního . Pokud se ve vzdálené pobočce vyskytnou provize, které ve vaší místní pobočce nemáte, ztratíte tyto příkazy bude.

Upozornění: buďte opatrní při úpravách, které jste již sdíleli s ostatními lidmi. Amending pověří v podstatě přepíše, že mají různé SHA ID, což představuje problém, pokud mají ostatní lidé kopie starého závazku, který jste přepsali. Každý, kdo má kopii starého potvrzení, bude muset synchronizovat svou práci s nově přepisovaným potvrzením, což může být někdy obtížné, takže se ujistěte, že se při pokusu o přepsání historie sdílených odevzdání koordinujete s ostatními, nebo se jen vyhnete přepsání sdílených komitací celkem.


Použijte interaktivní rebase

Další možností je použít interaktivní rebase.
To vám umožňuje upravit libovolnou zprávu, kterou chcete aktualizovat, i když se nejedná o poslední zprávu.

Chcete-li udělat git squash, postupujte takto:

// X is the number of commits to the last commit you want to be able to edit
git rebase -i HEAD~X

Jakmile squash vaše pověření - zvolte e/r pro editaci zprávy

 enter image description here

Důležitá poznámka o Interaktivní rebase

Při použití git rebase -i HEAD~X může být více než X potvrzuje. Git bude "sbírat" všechny provize v posledním X potvrzuje, a pokud došlo ke sloučení někde mezi tímto rozsahem uvidíte všechny provize stejně tak výsledek bude X +.

Dobrý tip:

Pokud to musíte udělat více než jednu pobočku a při změně obsahu můžete čelit konfliktům, nastavte git rerere a nechte git, aby tyto konflikty automaticky vyřešil.


Dokumentace

15296
EfForEffort
git commit --amend -m "your new message"
2458
lfx_cool

Pokud potvrzení, které chcete opravit, není poslední:

  1. git rebase --interactive $parent_of_flawed_commit

    Pokud chcete opravit několik chybných provizí, předejte rodiče nejstarší z nich.

  2. Vyjde editor s seznamem všech závazků od té, kterou jste zadali.

    1. Změňte pick na reword (nebo na staré verze Git, na edit) před jakýmikoli komitacemi, které chcete opravit.
    2. Jakmile uložíte, Git přehraje uvedené provize.

  3. Pro každý příkaz, který chcete reword , vás Git vrátí zpět do editoru. Pro každý příkaz, který chcete editovat , vás Git vloží do prostředí Shell. Pokud se nacházíte v prostředí Shell:

    1. Změňte závazek jakýmkoliv způsobem.
    2. git commit --amend
    3. git rebase --continue

Většina této posloupnosti vám bude vysvětlena výstupem různých příkazů. Je to velmi snadné, nemusíte si to zapamatovat - jen nezapomeňte, že git rebase --interactive vám umožňuje opravovat se bez ohledu na to, jak dlouho byli.


Všimněte si, že nebudete chtít změnit potvrzuje, že jste již tlačili. Nebo možná uděláte, ale v tom případě budete muset věnovat velkou pozornost komunikaci s každým, kdo si možná stáhl vaše závazky a udělal práci na nich. Jak mohu obnovit/resynchronizovat poté, co někdo stiskne rebase nebo reset na publikovanou větev?

2330

Chcete-li změnit předchozí potvrzení, proveďte požadované změny a proveďte tyto změny a poté spusťte

git commit --amend

Otevře se soubor v textovém editoru, který představuje novou zprávu o potvrzení. Začíná být naplněn textem ze staré zprávy. Změnit zprávu potvrzení, jak chcete, soubor uložte a ukončete editor dokončete.

Chcete-li změnit předchozí potvrzení a zachovat stejnou zprávu protokolu, spusťte

git commit --amend -C HEAD

Chcete-li opravit předchozí potvrzení úplným odebráním, spusťte

git reset --hard HEAD^

Pokud chcete upravit více než jednu zprávu o potvrzení, spusťte

git rebase -i HEAD~commit_count

(Nahradit commit_count s počtem povelů, které chcete upravit.) Tento příkaz spustí editor. Označte první příkaz (ten, který chcete změnit) jako „upravit“ místo „vybrat“, poté uložte a ukončete editor. Proveďte změnu, kterou chcete provést a poté spusťte

git commit --amend
git rebase --continue

Poznámka: "Změnu, kterou chcete provést" můžete také provést v editoru, který otevřel git commit --amend

762
Fatih

Jak již bylo zmíněno, git commit --amend je způsob, jak přepsat poslední potvrzení. Jedna poznámka: chcete-li také přepsat soubory , příkaz by byl

git commit -a --amend -m "My new commit message"
392
John

Můžete také použít git filter-branch.

git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD

Není to tak jednoduché jako triviální git commit --amend, ale je to obzvláště užitečné, pokud již máte nějaké falešné zprávy po chybné zprávě.

Všimněte si, že toto se pokusí přepsat KAŽDÝ úkol mezi HEAD a chybným potvrzením, takže byste měli zvolit příkaz msg-filter velmi moudře ;-)

352
Mark

Dávám přednost tomuto způsobu.

git commit --amend -c <commit ID>

V opačném případě dojde k novému potvrzení s novým ID potvrzení

312
krevedko

Pokud používáte nástroj Git GUI, je zde tlačítko s názvem "last last commit". Klikněte na toto tlačítko a poté se zobrazí vaše poslední soubory potvrzení a zprávy. Stačí upravit tuto zprávu a můžete ji potvrdit novou zprávou.

Nebo použijte tento příkaz z konzoly/terminálu:

git commit -a --amend -m "My new commit message"
310
Akhilraj N S

Můžete použít Git rebasing . Například, pokud chcete změnit zpět na potvrzení bbc643cd, spusťte

$ git rebase bbc643cd^ --interactive

Ve výchozím editoru upravte příkaz „pick“ na „edit“ v řádku, jehož potvrzení chcete změnit. Proveďte své změny a poté je stáhněte

$ git add <filepattern>

Nyní můžete použít

$ git commit --amend

upravit závazek a poté

$ git rebase --continue

vrátit se zpět do předchozí hlavy.

282
Shoaib Ud-Din
  1. Pokud chcete změnit pouze poslední zprávu o potvrzení, proveďte následující kroky:

    git commit --amend
    

    To vás přenese do textového exitoru a umožní vám změnit poslední zprávu.

  2. Chcete-li změnit poslední 3 zprávy o potvrzení nebo některou z potvrzovacích zpráv až do tohoto bodu, zadejte příkaz HEAD~3 do příkazu git rebase -i:

    git rebase -i HEAD~3
    
275
Heena Hussain

Pokud musíte změnit starou zprávu o potvrzení na více pobočkách (tj. Potvrzení s chybnou zprávou je přítomno ve více pobočkách), můžete použít:

git filter-branch -f --msg-filter \
'sed "s/<old message>/<new message>/g"' -- --all

Git vytvoří dočasný adresář pro přepisování a dodatečné zálohování starých odkazů v refs/original/.

  • -f bude vynucovat provádění operace. To je nutné, pokud je dočasný adresář již přítomen, nebo pokud jsou již odkazy uložené v souboru refs/original. Pokud tomu tak není, můžete tuto vlajku zrušit.

  • -- odděluje možnosti větve filtru od možností revize.

  • --all zajistí, že všechny větve a tagy budou přepsány.

Díky zálohování vašich starých referencí se můžete snadno vrátit do stavu před provedením příkazu.

Řekněme, že chcete obnovit svůj master a přistupovat k němu ve větvi old_master:

git checkout -b old_master refs/original/refs/heads/master
258
sebers

Použití

git commit --amend

Abychom to podrobně pochopili, vynikající post je 4. Přepisování historie gitů. To také mluví o kdy nepoužít git commit --amend.

221
skin

Změnit

Máte zde několik možností. Můžete dělat

git commit --amend

pokud je to váš poslední závazek.

Interaktivní rebase

V opačném případě, pokud to není váš poslední závazek, můžete vytvořit interaktivní rebase,

git rebase -i [branched_from] [hash before commit]

Pak uvnitř interaktivní rebase jednoduše přidáte editaci do tohoto potvrzení. Když to přijde udělat git commit --amend a upravit zprávu potvrzení. Pokud se chcete vrátit zpět před tímto potvrzovacím bodem, můžete také použít git reflog a smazat tento potvrzení. Pak stačí udělat git commit znovu.

195
wallerjake

Pokud používáte grafické uživatelské rozhraní Git, můžete poslední potvrzení, které nebylo stisknuto, změnit:

Commit/Amend Last Commit
183
gulchrider

Pokud je to vaše poslední potvrzení, jen změnit potvrzení:

git commit --amend -o -m "New commit message"

(pomocí příznaku -o (--only) se ujistěte, že změníte pouze zprávu o potvrzení)


Pokud se jedná o pohřbený zápis, použijte úžasnou interaktivní rebase :

git rebase -i @~9   # Show the last 9 commits in a text editor

Vyhledejte požadovaný příkaz, změňte pick na r (reword) a soubor uložte a zavřete. Hotovo!



Miniaturní vim tutoriál (nebo, jak se znovu sestavit pouze s 8 stisknutí kláves) 3jcwrEscZZ):

  • Pokud máte čas, spusťte vimtutor
  • hjkl odpovídají pohybovým klávesám 
  • Všechny příkazy mohou být prefixovány "rozsahem", např. 3j posunuje o 3 řádky dolů
  • i pro vložení režimu vkládání - text, který zadáte, se zobrazí v souboru
  • Esc nebo Ctrlc režim vkládání ukončíte a vrátíte se do normálního režimu
  • u vrátit zpět
  • Ctrlr opakovat
  • dddwdl smazat řádek, slovo nebo písmeno
  • cccwcl změnit řádek, slovo nebo písmeno, resp ddi)
  • yyywyl kopírovat ("yank") řádek, slovo nebo dopis, resp
  • p nebo P vložit po nebo před aktuální pozici
  • :wEnter pro uložení (zápis) souboru
  • :q!Enter ukončit bez uložení
  • :wqEnter nebo ZZ uložit a ukončit

Pokud text upravujete hodně, přepněte na rozložení klávesnice Dvořák, naučte se dotykový typ a naučte se vim. Stojí to za námahu? Ano.



ProTip ™: Nebojte se experimentovat s „nebezpečnými“ příkazy, které přepisují historii * - Git standardně neodstraní vaše potvrzení po dobu 90 dnů; najdete je v reflogu:

$ git reset @~3   # go back 3 commits
$ git reflog
c4f708b [email protected]{0}: reset: moving to @~3
2c52489 [email protected]{1}: commit: more changes
4a5246d [email protected]{2}: commit: make important changes
e8571e4 [email protected]{3}: commit: make some changes
... earlier commits ...
$ git reset 2c52489
... and you're back where you started

* Dávejte si pozor na volby jako --hard a --force ačkoli - mohou vyřadit data.
* Také nezapisujte historii do všech poboček, na kterých spolupracujete.

172
Zaz

Používám Git GUI co nejvíce, a to vám dává možnost změnit poslední potvrzení:

Tick that box

Také, git rebase -i Origin/masteris je pěkná mantra, která vám vždy předvede, co jste udělali na vrcholu mistra, a dá vám možnost změnit, odstranit, změnit pořadí nebo squash. Nejdřív se nemusíte držet toho hash.

165
Havard Graff

Wow, takže existuje mnoho způsobů, jak toho dosáhnout.

Dalším způsobem, jak toho dosáhnout, je odstranit poslední potvrzení, ale zachovat jeho změny tak, abyste neztratili svou práci. Poté můžete provést další potvrzení s opravenou zprávou. To by vypadalo asi takto:

git reset --soft HEAD~1
git commit -m 'New and corrected commit message'

Vždycky to dělám, když zapomenu přidat soubor nebo provést změnu.

Nezapomeňte specifikovat --soft místo --hard, jinak ztratíte tento závazek úplně.

135
Radu Murzea

Pro všechny, kdo hledají GUI pro Windows/Mac, aby pomohli s editací starších zpráv (tj. Nejen s nejnovější zprávou), doporučuji SourceTree . Následující kroky jsou uvedeny níže.

SourceTree interactive rebase

U provizí, které ještě nebyly přesunuty na vzdálený server:

  1. Ujistěte se, že jste provedli nebo uložili všechny aktuální změny (tzn. Že v záložce „Stav souboru“ nejsou uvedeny žádné soubory) - nebude to fungovat jinak.
  2. V záložce "Protokol/Historie" klikněte pravým tlačítkem myši na záznam s přilehlým řádkem v grafu níže pod jedním znakem potvrzení, které chcete upravit, a vyberte možnost "Znovu zavést děti z <potvrz. Ref. > interaktivně ... "
  3. Vyberte celý řádek zprávy o potvrzení, kterou chcete změnit (tj. Klikněte na sloupec Zpráva).
  4. Klikněte na tlačítko "Upravit zprávu".
  5. Upravte zprávu podle potřeby v dialogovém okně, které se objeví, a poté klepněte na tlačítko OK.
  6. Opakujte kroky 3-4, pokud existují jiné zprávy potvrzení změnit.
  7. Klepněte na tlačítko OK: Zahájení opětovného spuštění. Pokud je vše v pořádku, výstup skončí "Úspěšně dokončeno".

... Nebo ... pro provize, které již byly posunuty:

Postupujte podle kroků v této odpovědi , které jsou podobné výše, ale vyžadují další příkaz, který má být spuštěn z příkazové řádky k vynucení stisknutí větve - přečtěte si vše a použijte nezbytnou opatrnost!

125
Steve Chambers

Pokud chcete pouze upravit poslední použití pro potvrzení:

git commit --amend

nebo

git commit --amend -m 'one line message'

Pokud však chcete upravit několik příkazů v řadě, měli byste místo toho použít rebasing:

git rebase -i <hash of one commit before the wrong commit>

git rebase editing

V souboru, jako je ten nahoře, napište edit/e nebo jednu z dalších možností a stiskněte Save and exit.

Teď budete na prvním špatném spáchání. Proveďte změny v souborech a budou automaticky pro vás provedeny. Typ

git commit --amend

a uložte a ukončete

git rebase --continue 

chcete-li přejít na další výběr, dokud nedokončíte všechny své výběry.

Všimněte si, že tyto věci změní všechny vaše SHA hashe po tomto konkrétním potvrzení.

124

Pokud chcete změnit svou poslední zprávu, měli byste použít příznak --only nebo jeho zkratku -o s commit --amend:

git commit --amend -o -m "New commit message"

Tím zajistíte, že nedojde k neúmyslnému zvýšení vaší angažovanosti s inscenovanými věcmi. Samozřejmě je nejlepší mít správnou konfiguraci $EDITOR. Pak můžete nechat volbu -m vypnutou a git předvyplní potvrzovací zprávu starou. Tímto způsobem lze snadno upravovat.

123
David Ongaro

Aktualizujte svou poslední špatnou zprávu o potvrzení s novou zprávou o potvrzení v jednom řádku:

git commit --amend -m "your new commit message"

Nebo zkuste obnovit nastavení git takto:

# 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.

Použití resetu na rozdělení provizí do menších provizí

git reset vám může pomoci rozbít také jeden závazek do více provizí:

# 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 seperately 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"

Zde jste úspěšně zlomili svůj poslední závazek do dvou komitů.

99
przbadu

V této otázce je mnoho odpovědí, ale žádný z nich v detailu nevysvětluje, jak změnit starší zprávy o potvrzení pomocí VIM. Byl jsem uvízl a snažil jsem se to udělat sám, takže zde budu detailně psát, jak jsem to udělal, zejména pro lidi, kteří nemají žádné zkušenosti s VIM!

Chtěl jsem změnit posledních pět prověrek, které jsem již tlačil na server. To je docela 'nebezpečná' příčina, pokud někdo jiný již z toho vytáhl můžete zmatky věci změnou zprávy potvrzení. Pokud však pracujete na své vlastní pobočce a jste si jisti, že ji nikdo nestáhl, můžete ji změnit takto:

Řekněme, že chcete změnit pět nejnovějších provizí, pak to zadáte v terminálu:

git rebase -i HEAD~5 * Kde 5 je počet potvrzovacích zpráv, které chcete změnit. (takže pokud chcete změnit 10. na poslední potvrzení, zadejte 10)

Tímto příkazem se dostanete do VIM, kde můžete upravit historii potvrzení. Posledních 5 potvrzení se zobrazí nahoře, jako je tento:

pick <commit hash> commit message

Namísto pick musíte napsat reword. Můžete to provést v VIM zadáním i, což znamená, že přejdete do režimu INSERT. (Vidíte, že se nacházíte v režimu vkládání v dolní části aplikace Word INSERT.) Pro příkazy, které chcete změnit, zadejte reword namísto pick

Poté je třeba tuto obrazovku uložit a ukončit, a to tak, že nejprve přejdete do režimu příkazů stisknutím tlačítka esc. (můžete zkontrolovat, že jste v příkazovém režimu, pokud zmizí slovo INSERT ve spodní části). Pak můžete zadat příkaz zadáním :, příkaz pro uložení a ukončení je wq. Pokud tedy zadáte :wq, budete na správné cestě.

Pak VIM přejde přes každou zprávu, kterou chcete přepsat, zde můžete skutečně změnit zprávy o potvrzení. Uděláte to tak, že přejdete do režimu INSERT, změníte zprávu o potvrzení, přejdete do příkazového režimu a uložíte a ukončete. Udělejte to pětkrát a vy jste mimo VIM!

Pokud jste již posunuli své špatné provize, musíte je git Push --force přepsat. Pamatujte si, že git Push --force je docela nebezpečná věc, takže se ujistěte, že nikdo ze serveru nevytáhl, protože jste se dopustili špatných provizí!

Nyní jste změnili své zprávy!

(Jak vidíte, nejsem tak zkušený v VIM), takže pokud jsem použil špatný 'žargón', abych vysvětlil, co se děje, neváhejte a opravte mě!)

82
Marijn

Můžete použít git-rebase-reword

Je navržen tak, aby upravoval jakýkoli závazek (nejen poslední) stejně jako commit --amend

$ git rebase-reword <commit-or-refname>

To je pojmenované po akci na rebase interaktivní změnit kompromis: “reword”. Viz tento interaktivní příspěvek a man -section interaktivní režim-

Příklady:

$ git rebase-reword b68f560
$ git rebase-reword HEAD^
76
albfan

Přidal jsem alias reci, recm pro recommit (amend) to, teď to můžu udělat s git recm nebo git recm -m.

$ vim ~/.gitconfig

[alias]

    ......
    cm = commit
    reci = commit --amend
    recm = commit --amend
    ......
76
Chu-Siang Lai

Uvědomil jsem si, že jsem se dopustil překlepu. Chcete-li vrátit zpět, udělal jsem následující:

git commit --amend -m "T-1000, advanced prototype"
git Push --force

Varování: force tlačí vaše změny přepíše vzdálenou větev s vaší místní. Ujistěte se, že nebudete přepisovat nic, co chcete zachovat. Rovněž buďte opatrní ohledně síly, která tlačí pozměněný (přepsaný) závazek, pokud s vámi někdo sdílí pobočku, protože budou muset přepsat svou vlastní historii, pokud mají starou kopii tohoto závazku, který jste právě přepsali.

54
neoneye

Mám rád následující:

  1. git status
  2. git add --all
  3. git commit -am "message goes here about the change"
  4. git pull <Origin master>
  5. git Push <Origin master>
49
Kedar Adhikari

Pokud jste do vzdálené větve nestiskli kód ( GitHub / Bitbucket ), můžete změnit příkaz pro potvrzení na příkazovém řádku níže.

 git commit --amend -m "Your new message"

Pokud pracujete na konkrétní pobočce, postupujte takto:

git commit --amend -m "BRANCH-NAME: new message"

Pokud jste již kód poslali nesprávnou zprávou a při změně zprávy musíte být opatrní. To znamená, že po změně potvrzovací zprávy a pokusu o její opětovné ukončení skončíte s problémy. Aby byl hladký, postupujte takto.

Než to uděláš, přečtěte si prosím celou odpověď.

git commit --amend -m "BRANCH-NAME : your new message"

git Push -f Origin BRANCH-NAME                # Not a best practice. Read below why?

Důležitá poznámka: Když použijete sílu Push přímo, můžete skončit s problémy s kódem, které ostatní vývojáři pracují na stejné větvi. Abychom se těmto konfliktům vyhnuli, musíte před provedením force Push : vytáhnout kód z vaší pobočky.

 git commit --amend -m "BRANCH-NAME : your new message"
 git pull Origin BRANCH-NAME
 git Push -f Origin BRANCH-NAME

Toto je nejlepší postup při změně zprávy o potvrzení, pokud již byla odeslána.

43
Prabhakar