2009-06-10 13 views
35

Przypadkowo wykonałem 10 zatwierdzeń w gałęzi "testowanie", gdy zamierzałem je zatwierdzić w oddziale "master". Pozostałe wpisy w gałęzi "testowanie" to śmieci, więc nie chcę łączyć go z "głównym". Zamiast tego po prostu chcę powtórzyć 10 ostatnich zatwierdzeń na master.Powtórz ostatnią akcję N git w innym oddziale

Odpowiedz

16
  1. mistrz git checkout
  2. git whatchanged testowania
  3. git cherry-pick _________

?

+5

Tylko fyi - cherry-pick wykona tylko jedno zatwierdzenie na raz, więc będziesz musiał testować wiśnie-9, a następnie testować ~ 8, a następnie ... testować. Dlatego wolę podejście oparte na reorganizacji, które sugerował Talljoe ... oczywiście wynik jest taki sam. W rzeczywistości, jeśli wykonasz operację rebase w sposób interaktywny, git faktycznie użyje pick-picka pod maską. –

+9

@PatNotz 'git cherry-pick' obecnie może obecnie wykonywać wiele zmian jednocześnie (np.' Git cherry-pick testing ~ 10..testing'). –

+0

Nigdy nie powinieneś używać 'cherry-pick'. Przeczytaj [ten artykuł] (http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html), aby uzyskać więcej informacji. – Tim

80

Rebase powinien to zrobić.

git rebase -p --onto master testing~10 testing 

Spowoduje to skopiowanie ostatnich dziesięciu rewizje na badania do opanowania i sprawiają, że nowe badania (stary testowanie będzie sierotą). Następnie możesz połączyć master z testowaniem jako fast-forward.

git checkout master 
git merge testing 
+0

Używana odpowiedź Rona przed opublikowaniem. –

+8

Być może warto zauważyć, że to pozostawia testowanie w tym samym punkcie co master, pozostawiając "śmieci" popełnia osierocenie. To może, ale nie musi być dobre. Inną możliwością byłby mistrz egzekucji git; git reset - trudne testowanie; git rebase --onto HEAD @ {1} HEAD ~ 10 –

+0

@CharlesBailey Jakim cudem zamierzasz tam trafić? – Fredrick

2

Jak powiedział w uwag -inspired odpowiedź rebase jest pozostawiając „śmieci” zobowiązuje osieroconego.

Wystarczy używać prostych narzędzi:

git checkout master 
git merge testing 
git checkout testing 
git reset --hard HEAD~10 # Go back 10 commits (*1) 
git checkout master 

(* 1) Będziesz tylko „utraty” zobowiązuje od testing oddziału, ponieważ będziesz mieć te rewizje w master dzięki merge.

Powiązane problemy