2013-05-26 24 views
66

Używam Git Extensions na chwilę teraz (to jest niesamowite!), Ale nie znalazłem prostej odpowiedzi na następujące kwestie:Jaka jest różnica między "squash" i "fixup" w Git/Git Extension?

Czasami podczas wpisywania wiadomości popełnił, zrobić literówkę. Mój przyjaciel pokazał mi jak to naprawić w następujący sposób (w Git Extentions):

Kliknij prawym przyciskiem myszki na popełnić> Zaawansowane> fixup popełnienia

enter image description here

Potem po prostu sprawdzić pole "Zmień" i ponownie napisz moją wiadomość i voila! Mój komunikat zatwierdzenia jest naprawiony.

Jednak ta inna opcja "Squash commit" ... Zawsze zastanawiałem się, co to jest ?!

Moje pytanie brzmi:

Czy ktoś po prostu wyjaśnić mi, co jest dokładna różnica między Squash commit i Fixup popełnić w Git/Git Extentions? Wyglądają jakby ... „podobny” do mnie: enter image description here enter image description here

Odpowiedz

85

nie wiem co Git Extensions robi z nim specjalnie, ale git rebase posiada opcję automatycznego squasha lub fixup popełnia z dyni! lub naprawić! Prefiksy odpowiednio:

--autosquash, --no-autosquash 
     When the commit log message begins with "squash! ..." (or "fixup! 
     ..."), and there is a commit whose title begins with the same ..., 
     automatically modify the todo list of rebase -i so that the commit 
     marked for squashing comes right after the commit to be modified, 
     and change the action of the moved commit from pick to squash (or 
     fixup). 

Różnica między squash i fixup jest to, że podczas rebase, operacja squash poprosi połączyć przesłania oryginału i squash popełnić, natomiast operacja fixup zachowa oryginalną wiadomość i odrzucić wiadomość z zatwierdzenia poprawek.

+4

Możesz przeczytać więcej o 'rebase' i squash/fixup w [the Git docs] (http://git-scm.com/docs/git-rebase). –

+0

To jest świetna odpowiedź. Zawsze zastanawiałem się, dlaczego otrzymałem wiadomości o zatwierdzeniu kombinacji. –

39

Po prostu, kiedy przebazowania serię zatwierdzeń, każdy commit oznaczony jako squash, daje możliwość wykorzystania jej przesłanie w ramach pick lub reword popełnienia wiadomości ci.

Podczas korzystania fixup Przesłanie, które zobowiązują się wyrzucić.

9

Od git-rebase doc:

Jeśli chcesz złożyć dwa lub więcej zobowiązuje do jednego, wymienić polecenie „pick” dla drugiego i kolejnych zatwierdzeń z „squash” lub „fixup”. Jeśli zatwierdzenia miały różnych autorów, złożone zatwierdzenie zostanie przypisane autorowi pierwszego zatwierdzenia. Sugerowany komunikat zatwierdzenia dla złożonego zatwierdzenia jest połączeniem komunikatów zatwierdzania pierwszego zatwierdzenia i poleceń "squash", ale pomija wiadomości zatwierdzenia zatwierdzenia za pomocą polecenia "naprawienia".

0

Ja tinkered z rozszerzeniami git i nie mogłem go zmiażdżyć wielu commits w jednym.Aby to zrobić, musiałem uciekać się do wiersza poleceń i znalazł this post pomocne

git rebase -i Head~2 

To jest interaktywny rebase i zwrócić uwagę na następujące:

  • ~ 2 odnosi się tutaj do ilu zobowiązuje chcesz włącz się w tę operację, włączając bieżącą głowicę
  • Musisz edytować interaktywne okno edycji, zostaw pierwszy element jako "wybierz" i zamień kolejne linie na "squash". Instrukcje w powyższym linku są dużo jaśniejsze, jeśli są nieprzejrzyste.