Smazání potvrzení git

Při práci s Gitem zjistíte, že někdy je třeba závazky odstranit, protože způsobily chybu nebo je třeba je přepracovat.

Pokud ano poslední potvrzení je velmi přímočaré. Jednoduše spusťte:

git reset HEAD^

Tím se vyřadí poslední potvrzení, ale všechny změny souborů zůstanou beze změny.

Pokud potřebujete odstranit více než jen poslední potvrzení, můžete použít dvě metody. První používá rebase, což vám umožní odstranit jeden nebo více po sobě jdoucích závazků, druhým je cherry-pick, který vám umožní odstranit po sobě jdoucí závazky.

Příklad git logu

číslo Hash Zpráva o potvrzení Autor
1 2c6a45b (HEAD) Přidání veřejné metody pro přístup k chráněné metodě Tom
2 ae45fab Aktualizace databázového rozhraní Dodavatel 1
3 77b9b82 Zlepšení databázového rozhraní dodavatel 2
4 3c9093c Sloučení vývoje větve do hlavní Tom
5 b3d92c5 Přidání nového modulu Event CMS Paul
6 7feddbb Přidávání třídy a souborů CMS Tom
7 a809379 Přidání projektu do Gitu Tom

Using Rebase

Pomocí výše uvedeného protokolu git chceme odstranit následující revize; 2 & 3 (ae45fab & 77b9b82). Jelikož se jedná o po sobě jdoucí potvrzení, můžeme použít rebase.

git rebase --onto <branch name>~<first commit number to remove> <branch name>~<first commit to be kept> <branch name>

např. K odstranění potvrzení 2 & 3 výše

git rebase --onto repair~3 repair~1 repair

Použití nástroje Cherry Pick

Krok 1: Najděte potvrzení před potvrzením chcete odebrat git log

Krok 2: Pokladna, která spáchá git checkout <commit hash>

Krok 3 : Vytvořte novou větev pomocí aktuálního potvrzení odevzdání git checkout -b <new branch>

Krok 4: Nyní je třeba přidat potvrzení po odebraném potvrzení git cherry-pick <commit hash>

Krok 5: Nyní opakujte krok 4 pro všechny další závazky, které si chcete ponechat.

Krok 6: Jakmile budou všechny závazky přidány do vaší nové pobočky a máte byl spáchán. Zkontrolujte, zda je vše ve správném stavu a zda funguje správně. Znovu zkontrolujte, zda bylo vše potvrzeno: git status

Krok 7: Přepněte na poškozenou větev git checkout <broken branch>

Krok 8: Nyní proveďte tvrdý reset na rozbité větvi ke spáchání před tím, který chcete odebrat git reset --hard <commit hash>

Krok 9: Sloučte své pevná větev do této větve git merge <branch name>

Krok 10: Posuňte sloučené změny zpět do původu. UPOZORNĚNÍ: Toto přepíše vzdálené repo! git push --force origin <branch name>

Proces můžete provést bez vytvoření nové větve nahrazením kroku 2 & 3 krokem 8 a poté neprovádět krok 7 & 9.

Příklad

Řekněme, že chceme odstranit revize 2 & 4 z repo.

  1. git checkout b3d92c5 Pokladna za poslední použitelné potvrzení.
  2. git checkout -b repair Vytvořte novou větev, na které budete pracovat.
  3. git cherry-pick 77b9b82 Spustit prostřednictvím potvrzení 3.
  4. git cherry-pick 2c6a45b Spustit potvrzení 1.
  5. git checkout master Master pokladny.
  6. git reset --hard b3d92c5 Resetovat master na poslední použitelné potvrzení.
  7. git merge repair Sloučit naši novou větev do masteru.
  8. git push --hard origin master Push master to the remote repo.

Závěrečná poznámka

Git rebase & cherrypick jsou nebezpečné, ale silné řešení, která by měla být použita pouze jako poslední a může být proveden pouze někým, kdo ví, co dělá. Dávejte pozor, aby obě řešení mohla mít nepříznivé účinky na ostatní uživatele, kteří pracují na stejném úložišti / pobočce.

Nakonec nezapomeňte být opatrní a hodně štěstí!

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *