2011-06-17 13 views
5

Załóżmy, że istnieją dwie gałęzie: master i slave, które edytują ten sam plik i tę samą linię. Początkowo, zawartość pliku jestJak ponownie sformatować poprawkę po scaleniu w Git?

foo bar 

następnie w oddziale slave jest edytowany stać

foo bar baz 

Teraz użytkownik oddziału slave formatuje łatę (git format-patch master) i wysyła go do użytkownika oddziału master. W tym samym czasie, w oddziale master ten sam plik jest edytowany i staje

foo bar spam eggs 

Łata nie może być stosowane, a master pyta slave scalić i zrobić nowy plaster. Gdy master zostanie scalony w slave, a konflikt zostanie rozwiązany, nadszedł czas na ponowne sformatowanie poprawki. Wykres popełnić wygląda następująco:

slave:    master: 

foo bar baz spam eggs 
    |    \ 
    |    \ 
    |    foo bar spam eggs 
    |     | 
foo bar baz    | 
     \     | 
     \    | 
     +--------- foo bar 

Najnowszy commit (scalenia) na slave wygląda następująco:

@@@ -1,1 -1,1 +1,1 @@@ 
- foo bar baz 
-foo bar spam eggs 
++foo bar baz spam eggs 

Jednak jeśli teraz uruchomić git format-patch master, wciąż uzyskać dokładnie taką samą łatkę jak poprzednio, która nie uwzględnia scalania i rozwiązywania konfliktów pod uwagę:

@@ -1 +1 @@ 
-foo bar 
+foo bar baz 

Jak sformatować poprawkę, która miałaby zastosowanie do najnowszego wzorca? Chciałbym to zrobić bez rebase.

Aktualizacja: git format rev1..rev2, gdzie rev1 i rev2 są szefowie master i custom oddziałów odpowiednio, nie zawierają zmiany związane z rozwiązywaniem konfliktów. git-diff formatuje poprawną poprawkę, ale pomija wiadomości dotyczące zatwierdzania.

Odpowiedz

1

Dlaczego używasz łatek? Powinieneś naciskać i ciągnąć między repo.

Połączenie nie jest czymś, z czego można zrobić łatkę. Będzie śledzić tylko pierwszego rodzica. Możesz uzyskać to, czego potrzebujesz, używając git diff i formatowania dla łaty, określając 2 różne zatwierdzenia do rozróżnienia.

Mam nadzieję, że to pomoże.

+0

Używam łatek, ponieważ tego właśnie chce firma i nie mam kontroli nad przepływem pracy. Muszę sformatować łatki, które uwzględniają rozwiązywanie konfliktów, ponieważ również publikuję moje repozytorium i nie można go ponownie utworzyć. 'git diff', niestety, nie zawiera komunikatów commit. – sastanin

+0

Istnieje sposób na scalenie tylko jednego rodzica. Łatka z tego dostarczy ci wynik, którego potrzebujesz. –

+0

Połączenie z jednym rodzicem? Jak to jest możliwe? Czy "git-merge" nie ma na celu "połączenia dwóch lub więcej historii rozwoju"? – sastanin

Powiązane problemy