Git
De krenten uit de pap halen
Zoeken…
Invoering
Een cherry-pick neemt de patch die werd geïntroduceerd in een commit en probeert deze opnieuw toe te passen op de branch waar je momenteel op zit.
Syntaxis
- git cherry-pick [--edit] [-n] [-m oudernummer] [-s] [-x] [--ff] [-S [key-id]] commit ...
- git cherry-pick - ga verder
- git cherry-pick - stop
- git cherry-pick - aborteren
parameters
parameters | Details |
---|---|
-e, - bewerken | Met deze optie laat git cherry-pick je het commit bericht bewerken voordat je gaat committeren. |
-X | Bij het opnemen van de commit, voeg een regel met de tekst "(cherry picking from commit ...)" toe aan het oorspronkelijke commit-bericht om aan te geven uit welke commit deze wijziging is gekozen. Dit wordt alleen gedaan voor kersenplukkers zonder conflicten. |
--ff | Als de huidige HEAD hetzelfde is als de ouder van de cherry-pick'ed commit, zal een fast forward naar deze commit worden uitgevoerd. |
--doorgaan met | Ga door met de lopende bewerking met behulp van de informatie in .git / sequencer. Kan worden gebruikt om door te gaan na het oplossen van conflicten in een mislukte cherry-pick of terug te keren. |
--quit | Vergeet de lopende bewerking. Kan worden gebruikt om de sequencerstatus te wissen na een mislukte cherry-pick of terug te keren. |
--abort | Annuleer de bewerking en keer terug naar de pre-sequentiestatus. |
Een commit van de ene branch naar de andere kopiëren
git cherry-pick <commit-hash>
zal de wijzigingen aangebracht in een bestaande commit toepassen op een andere branch, terwijl een nieuwe commit wordt opgenomen. In wezen kun je commits van branch naar branch kopiëren.
Gegeven de volgende boom (bron)
dd2e86 - 946992 - 9143a9 - a6fd86 - 5a6057 [master]
\
76cada - 62ecb3 - b886a0 [feature]
Laten we zeggen dat we b886a0
naar master willen kopiëren (bovenop 5a6057
).
We kunnen rennen
git checkout master
git cherry-pick b886a0
Nu ziet onze boom er ongeveer zo uit:
dd2e86 - 946992 - 9143a9 - a6fd86 - 5a6057 - a66b23 [master]
\
76cada - 62ecb3 - b886a0 [feature]
Waar de nieuwe commit a66b23
dezelfde inhoud heeft (source diff, commit bericht) als b886a0
(maar een andere ouder). Merk op dat cherry-picking alleen wijzigingen op die commit b886a0
in dit geval b886a0
), niet alle wijzigingen in de functietak (hiervoor moet je rebasen of samenvoegen gebruiken).
Een reeks commits van de ene tak naar de andere kopiëren
git cherry-pick <commit-A>..<commit-B>
plaatst elke commit na A en tot en met B bovenop de momenteel uitgecheckte branch.
git cherry-pick <commit-A>^..<commit-B>
plaatst commit A en elke commit tot en met B bovenop de momenteel uitgecheckte branch.
Controleren of een cherry-pick vereist is
Voordat je het cherry-pick proces start, kun je controleren of de commit die je wilt cherry-pick al in de target branch bestaat, in welk geval je niets hoeft te doen.
git branch --contains <commit>
geeft lokale branches weer die de gespecificeerde commit bevatten.
git branch -r --contains <commit>
bevat ook remote tracking branches in de lijst.
Find commits moeten nog worden toegepast op upstream
Command git cherry
toont de veranderingen die nog niet zijn geplukt.
Voorbeeld:
git checkout master
git cherry development
... en zie de uitvoer ongeveer zo:
+ 492508acab7b454eee8b805f8ba906056eede0ff
- 5ceb5a9077ddb9e78b1e8f24bfc70e674c627949
+ b4459544c000f4d51d1ec23f279d9cdb19c1d32b
+ b6ce3b78e938644a293b2dd2a15b2fecb1b54cd9
De commits dat met +
zijn degenen zijn die nog niet zijn uitgekozen voor development
.
Syntaxis:
git cherry [-v] [<upstream> [<head> [<limit>]]]
opties:
-v Toon de commit onderwerpen naast de SHA1s.
<stroomopwaarts> Stroomopwaartse tak om te zoeken naar equivalente commits. Standaard ingesteld op de stroomopwaartse tak van HEAD.
<head> Werkende tak; is standaard ingesteld op HOOFD.
<limiet> Niet rapporteren commits tot (en inclusief) limiet.
Raadpleeg de documentatie van git-cherry voor meer info.