2011-12-22 12 views
5

Załóżmy, że mam gałąź linii głównej i gałąź funkcji. Kilka razy włączyłem gałąź główną do gałęzi z funkcjami, ale miałem tylko kilka bardzo drobnych konfliktów scalających. Chcę uporządkować historię, aby na końcu było tylko jedno połączenie. Jaka jest najlepsza metoda na zrobienie tego?Łączenie łączy w jedno scalenie

+1

Kiedy mówisz oczyścić historię, trzeba być bardziej szczegółowe. Jeśli chcesz usunąć scalenia z głównej linii do funkcji, musisz zdecydować, jak ma wyglądać gałąź funkcji, z usuniętymi połączeniami. Na przykład, jeśli niektóre prace w gałęzi elementów zależą od zmian wprowadzonych w głównej linii (a następnie scalonych w gałąź operacji), usunięcie scaleń spowoduje, że gałąź funkcji przestanie się kompilować, ponieważ zależy to od usuniętego kodu. –

+0

@KevinBallard: To jest poprawny punkt. W niektórych przypadkach możesz chcieć przesunąć gałąź do góry. Nie jestem tym zbyt zaniepokojony, jeśli chodzi o to pytanie, chcę tylko upewnić się, że oddział wraca tylko raz – Casebash

Odpowiedz

1

Czy zapoznałeś się z git rebase?

git co -b temp_feature feature 
git rebase master 

Powinno to zignorować scalenia, ale trzeba będzie ponownie rozwiązać konflikty. Tworzy również gałąź temp_feature dla łatwiejszego powrotu, ale to samo można osiągnąć z reflog.

(Zła odpowiedź poniżej: to stworzy pojedynczy popełnić, nie pojedynczy seryjnej: - /)

Myślę najprostszą jest zrobić następujące:

git co master 
git merge --squash feature 

To stworzy pojedynczy popełnić z całej gałęzi funkcji. Jeśli nie chcesz, aby utrzymać gałąź funkcji zrobić:

git branch -D feature 
1

Można zrobić interaktywną rebase aby to osiągnąć, ale należy to zrobić tylko, więc jeśli jeszcze nie podzielił, że historia z nikim innym. W praktyce oznacza to, że powinieneś to zrobić tylko, jeśli nie zrobiłeś git push do wspólnego repo.

1

Wygląda na to, że chcesz wyrwać niezobowiązkowe zatwierdzenia dla gałęzi funkcji w gałąź czystych elementów, a następnie w końcu połączyć gałąź czystych elementów z najnowszym wzorcem (cokolwiek to jest). Możesz użyć rebase, aby przyspieszyć część tego cherrypicking, którego niestety nie znam dobrego sposobu na migiem, ponieważ nie jest to coś, co robię bardzo często. Pomoże Ci to, jeśli masz gui, które pozwala wybrać wiele potwierdzeń jednocześnie.

Edit: To byłoby bardziej konkretne rozwiązanie: How to cherry pick a range of commits and merge into another branch