2013-08-28 10 views
13

OK, więc bardzo podoba mi się polecenie git rerere. Chociaż nie używałem go tak bardzo, poza automatycznym rejestrowaniem moich konfliktów i rozwiązywaniem ich. Jednak zepsułem jedną z moich konfliktów podczas dość dużego rebase (ponowne umieszczanie naprawdę nieaktualnego oddziału w najnowszym wydaniu).Cofnij rozdzielczość git rerere, która została zrobiona w reorganizacji

feature -> a - b - c - d 

release -> e - f - g - h 

rebase/feature -> e - f - g - h - a' - b' - c' - d' 

Więc, powiedzmy na przykład, że b”ma nieprawidłową seryjnej (dzięki mnie!) I chcę, aby ponownie nagrać to. Jak to zrobić? Widziałem opcję check git --conflict, wspomnianą w Rerere Your Boat, ale nie jestem zbyt jasna, jak to działa i czy ma tu zastosowanie. Być może muszę sprawdzić stan konfliktu scalania i uruchomić git rerere, gdy poprawnie rozwiążę ten konflikt?

Zazwyczaj po prostu oddałbym czubek gałęzi, ale jest to rzut wyrzucony. Po prostu próbuję poradzić sobie z konfliktami z wyprzedzeniem, więc gdy zsynchronizuję się z tym zespołem funkcji, minimalizujemy czas potrzebny. Ma sens?

+0

Kto chce zapomnieć 'git uchwał rerere', komentarz przez @ JánSáreník pod http://stackoverflow.com/a/21635422/2816199 może być niezwykle pomocna. – tomekwi

Odpowiedz

18

Możesz powiedzieć rerere, aby zapomnieć o zarejestrowanej rozdzielczości scalania, ponownie uruchamiając scalanie i zezwalając rerere na zastosowanie jego rozdzielczości w drzewie pracy.

Możesz sprawdzić a' a następnie zrobić git merge b wrócić do tej sytuacji (prawdopodobnie będziesz w kasie jednorodzinnego głowie odkąd podano hash commit a', więc zdawać sobie sprawę, że nie jesteś na oddziale).

Następnie należy podać git rerere forget FILE-WITH-BAD-MERGE, gdzie należy podać plik, którego zapisaną rozdzielczość konfliktu należy zapomnieć.

forget <pathspec>
Resetowanie rozwiązywania konfliktów, które rerere Nagrywał dla obecnego konfliktu.

(Od the Git documentation for git-rerere.)

+26

Możesz także wykonać 'rm -rf .git/rr-cache', aby całkowicie wyczyścić pamięć podręczną rr. –

+4

^^ pomogło to podczas 'rerere forget' nie zrobił tego dla mnie – Dennis

+1

Oryginalny autor był zdezorientowany przez' git checkout --conflict'. Jeśli jednak znajdujesz się w środku bazy i nie chcesz zaczynać od początku, ta opcja jest na dobrej drodze. Istnieje bardziej znana opcja, '-m'. Możesz wykonać polecenie 'git checkout -m FILE-WITH-BAD-MERGE', aby przywrócić znajome, domyślne znaczniki konfliktu pliku. Tak jakbyś nie miał zastosowanej rozdzielczości rerere. – Bluu