2016-01-11 10 views
6

Deweloper, który niedawno opuścił firmę, który pozostawił po sobie kilka transakcji w repozytorium sprzed kilku miesięcy, jest po prostu "zaktualizowany". Idealnie, chciałbym przekonwertować je do jednego zatwierdzenia, ale zrobiłem to tylko dla ostatnich zatwierdzeń.Jak najlepiej zmiażdżyć stare zatwierdzenia?

W jaki sposób mogę to zrobić na przykład w następujący sposób (zakładając, że od 2 miesięcy temu oznacza, że ​​są ich setki)?

.... od 2 miesięcy temu

aabbcc updated 
aabbdd updated 
aabbee updated 
aabbff updated 

Nie chcąc/potrzebuje niczego nadzwyczajnego, po prostu proste rozwiązanie. Te zatwierdzenia nie zostały publicznie udostępnione (inne niż ze mną dzisiaj), więc nie ma problemu z naruszaniem historii popełnienia innych ludzi.

Odpowiedz

1

W tym celu squash git wykonaj te kroki:

// X is the number of commits you wish to squash 
git rebase -i HEAD~X 

Po squash swoje zobowiązuje - wybierz s do squasha = Połączy wszystkie rewizje w jeden commit.

enter image description here


mieć również --root flagę w przypadku trzeba go

try: git rebase -i --root

--root

Rebase all commits reachable from <branch>, instead of limiting them with 
an <upstream>. 

This allows you to rebase the root commit(s) on a branch. 
When used with --onto, it will skip changes already contained in `<newbase>` 
(instead of `<upstream>`) whereas without --onto it will operate on every 
change. When used together with both --onto and --preserve-merges, all root 
commits will be rewritten to have `<newbase>` as parent instead.` 
+0

Nie mam - czy jest jakikolwiek sposób przekazać rebase -i zakres identyfikatorów zatwierdzających takich jak aabbcc..aabbbff – timpone

+0

@timpone Nie. Interactive rebase to skrypt, który używa 'git cherry-pick' pod maską. Za pomocą 'cherry-pick' możesz wybrać zasięg. – Kaz

+0

Nie, nie można użyć strzelania w zakresie – CodeWizard

1

wiek zatwierdzeń ma nie ma znaczenia, zgniatanie to walka.

Jeśli rebasing nie jest dla ciebie preferowany, lub są dosłownie tysiące zatwierdzeń, które chcesz zgnieść i nie możesz sobie z tym poradzić, możesz po prostu delikatnie zresetować do pierwszego skrótu zatwierdzenia i ponownie zatwierdzić wszystko:

$ git reset aabbff 
$ git commit -m "This commit now contains everything from the tip until aabbff" 

Będziesz wtedy miał tylko jedno zatwierdzenie, takie samo jak rebase -> squash.

+0

haha, to nie jest tysiące, ale jak 200, a oni są z okresu, w którym on po prostu wszystko popełnia. Czy istnieje sposób na zresetowanie z aabbff na inny konkretny commit (jak myślę na odwrotnej stronie postaci tyldy). Przepraszam, zdecydowanie nie jestem guru-guru, więc moim największym lękiem jest to, żeby wszystko zepsuć. – timpone

+0

Hej @timpone - nie, polecenie 'reset' zresetuje od końca gałęzi z powrotem do podanej wersji/skrótu. Jeśli chcesz kierować zakres zatwierdzeń gdzieś w środku historii gałęzi, powinieneś dokonać rebase. –

Powiązane problemy