2013-09-27 16 views
7

Zakładając, że w ten sposób:Jak scalić git github --squash tak, że „sieć” diagram pokazuje seryjnej

 master: o--o--o 
development:  `o--o--o 

chcę scalić zmiany z powrotem jako jeden commit (unikając wszystkich śmieci zobowiązuje wzdłuż sposób):

git checkout master 
git merge --squash development 

Ale wtedy strona sieciowa github pokazuje to:

 master: o--o--o---------o 
development:  `o--o--o 

Co pan ma zrobić to pokazuje, czego można się spodziewać, to znaczy:

 master: o--o--o---------o 
development:  `o--o--o’ 
+0

Otrzymujesz ostatni wykres za pomocą 'git merge --no-ff'. Ale zauważ, że "śmieci popełniają" wciąż tam są. –

+0

Warto również zauważyć, że "scalenie squasha" nie jest prawdziwym scaleniem (jak pokazuje historia); w rzeczywistości jest to raczej "odskocznia do squasha". Prawdopodobnie dostaniesz to, czego naprawdę chcesz, poprzez najpierw "zagłuszanie" rozwoju (** przepisywanie historii **), a następnie normalne łączenie wyniku z mistrzem. –

Odpowiedz

9

Na ostatnim wykresie, można użyć następującego polecenia:

git merge --no-ff 
git branch -d development 

master: o--o--o---------o 
       `o--o--o’ 

powiesz git stworzyć scalającej, nawet jeśli połączone gałąź jest szybka do przodu, tzn. ostatni zatwierdzenie master jest bezpośrednim przodkiem połączonego oddziału.

Pamiętaj, że "śmieciowe zobowiązanie" nie zostanie usunięte, ale jeśli nie masz naprawdę dobrego powodu, powinieneś zachować swoją historię tak, jak jest. Zezwalanie na squashowanie utrudnia przeglądanie historii.

Jeśli uważasz, że historia twojej gałęzi rozwojowej jest pełna bzdur, możesz ją również przepisać przed połączeniem, używając interaktywnego rebase.

git checkout developement 
git rebase -i master 

Będziesz mógł wybierać, edytować, zmieniać kolejność, zgniatać lub odrzucać zatwierdzenia i przepisywać historię swojego oddziału. Gdy to zrobisz, użyj klasycznego scalenia (z lub bez --no-ff, jak wolisz).