2015-05-28 15 views
6

Mam świadomość, że możliwe jest naprawienie sesji git bisect przez git bisect log i git bisect replay zgodnie z opisem w odpowiedzi na this question.Czy możliwe jest bardziej ukierunkowane wyjście z błędów git bisect?

Jednakże, kiedy zepsuję sesję bisect, jest to prawdopodobnie tylko jedna zła decyzja, i chciałbym móc ją naprawić bezpośrednio (tj. Bez przerwania całej operacji).

Na przykład mogę sobie wyobrazić, że powinno być możliwe zrobienie tylko rm .git/refs/bisect/good-<hash>, aby cofnąć błędną git bisect good.

Czy to się zgadza, czy też coś przeoczyłem?
Czy można dokonać analogicznej manipulacji dla błędnego git bisect bad?

+0

git bisect to skrypt powłoki, idź do niego. – jthill

+0

@jthill Ah, fajne, nie zdawałem sobie sprawy, że to było takie proste, tylko z grubsza 500 LOC :-) Na pewno przyjrzę się temu skryptowi bliżej. – cmaster

Odpowiedz

5

Tak, te informacje są używane przez git bisect do poznania bieżącego stanu. W związku z tym możliwe jest cofnięcie błędnego ustawienia za pomocą regulacji refs przy użyciu git update-ref.

Jednak ta ma dwie połowy:

  1. Dobre i złe commity są zaznaczone inaczej git bisect:

    • Wszystkie zobowiązuje, które są oznaczone jako dobry dostać refs/bisect/good-<commit id> ref. Jako taka, może być cofnięta z odpowiednim

      git update-ref -d refs/bisect/good-<commit id> 
      
    • Jednak git bisect trzyma tylko ślad jednego złego popełnić, więc są wymagane, aby zresetować ref refs/bisect/bad do znanej złe popełnić z

      git update-ref refs/bisect/bad <really bad commit id> 
      

      Najprawdopodobniej zajrzysz do dziennika bisect (pod numerem .git/BISECT_LOG lub przez git bisect log), aby dowiedzieć się, do którego zatwierdzenia zresetować numer refs/bisect/bad.

  2. Oprócz literatury, git bisect śledzi wszystkich swoich działaniach w dzienniku znajduje się .git/BISECT_LOG. Chociaż ten dziennik jest nieistotny dla normalnej pracy, manipulowanie przy pomocy reflektów prowadzi do bezsensownego dziennika. Oczywiście możesz to zignorować lub odpowiednio poprawić dziennik, ale to nie będzie lepsze niż rozwiązanie, które połączyłeś.

Tak, tak, można to zrobić, ale jest cena do zapłacenia. Podsumowując, zapisywanie dziennika, poprawianie go i odtwarzanie go wydaje się lepszą alternatywą.

Powiązane problemy