2012-09-26 6 views
7

Przeszedłem przez wiele kółek, aby uprościć przebieg pracy fork/rebase/pull-request git u deweloperów mojego zespołu, którzy obawiają się kontroli wersji i linii poleceń.Wymusza na git wykonanie operacji "no-op" podczas remizy

W dodanie artykułu rebase na naszej wiki rozwoju, właśnie do punktu, w którym mówię „Czy git rebase. Jeśli istnieją jakiekolwiek konflikty scalania, naprawić je. Następnie wykonaj git add. Następnie zrobić git rebase --continue”.

Ale w pracy poprzez przykład i biorąc zrzuty ekranu, przypomniało mi się, że jeśli występuje konflikt seryjnej, a ja go rozwiązać na korzyść górnej gałęzi, robi git rebase --continue w rzeczywistości nie chce kontynuować i daje błąd:

No changes - did you forget to use 'git add'? 
If there is nothing left to stage, chances are that something else 
already introduced the same changes; you might want to skip this patch. 

jest to doskonałe omówienie technicznych szczegółów tutaj: Git rebase: conflicts keep blocking progress

Ale co chciałbym to zrobić to zachowanie zatrzymać.

Zakładam, że istnieje dobry powód, dla którego tak się dzieje (prawdopodobnie w związku z rebase za pomocą zwykłego mechanizmu zatwierdzania, gdzie to zachowanie prawdopodobnie ma sens), ale w tej sytuacji jest to mylące i nieintuicyjne i powoduje logikę konfliktu: "Napraw Jeśli twoja poprawka wygląda dokładnie tak, jak poprzednia gałąź, wykonaj git rebase --skip. We wszystkich innych przypadkach wykonaj git rebase --continue. "

Czy istnieje sposób, aby zmiękczyć to zachowanie, albo z flagą do rebase lub w pliku konfiguracyjnym kontrolowanym przez wersję (więc nie muszę konfigurować go na każdym komputerze dewelopera lub dostarczać instrukcje, aby to zrobić)?

+2

Nie sądzę, że jest to duplikat tego pytania. OP tam pyta o to, jak pominąć ponowne umieszczanie pustych zatwierdzeń, podczas gdy OP tutaj pyta o to, jak pozwolić 'git rebase' stworzyć puste zatwierdzenia. –

+0

Ale dlaczego chcesz pusty commit? Puste zatwierdzenie oznacza, że ​​cała wykonana w nim praca została wprowadzona w zatwierdzeniu z gałęzi, która została ponownie pobrana. W takim przypadku całe zatwierdzenie musi zostać usunięte. Można to zrobić po fakcie (np. Za pomocą interaktywnego rebase i pomijając niechciane zatwierdzenie) lub innymi metodami, ale z pewnością "źle" mieć puste zatwierdzenie. – ErikE

Odpowiedz

2

Obecny documentation of git-rebase wspomina opcję --keep-empty:

--keep-empty
     Keep the commits that do not change anything from its parents in the result.

Niestety, nie ma na to ustawienie, aby umieścić w pliku konfiguracyjnym.

Powiązane problemy