2015-05-28 10 views
6

Sono consapevole che è possibile risolvere una sessione git bisect tramite git bisect log e git bisect replay come descritto nelle risposte a this question.È possibile un recupero più mirato dagli errori di git bisect?

Tuttavia, quando rovino una sessione di bisect, è probabile che sia solo una singola decisione sbagliata, e vorrei essere in grado di correggerlo direttamente (cioè senza interrompere l'intera operazione).

Ad esempio, posso immaginare che dovrebbe essere possibile eseguire semplicemente rm .git/refs/bisect/good-<hash> per annullare un errore errato git bisect good.

È corretto o mi sono perso qualcosa?
E, una analoga manipolazione può essere eseguita per un errato git bisect bad?

+0

git bisect è uno script di shell, provaci. – jthill

+0

@jthill Ah, bello, non mi rendevo conto che era così facile, solo approssimativamente 500 LOC :-) Darò sicuramente un'occhiata più da vicino a quella sceneggiatura. – cmaster

risposta

5

Sì, questi riferimenti sono quelli che git bisect utilizza per conoscere il suo stato corrente. Come tale, è possibile annullare un errore errato git bisect good regolando i riferimenti usando git update-ref.

Tuttavia, questo ha due fermi:

  1. commit Buoni e cattivi sono contrassegnati in modo diverso da git bisect:

    • tutti i commit che sono contrassegnati come buona ottenere un ref refs/bisect/good-<commit id>. Come tale, questo può essere annullata con un corrispondente

      git update-ref -d refs/bisect/good-<commit id> 
      
    • Tuttavia, git bisect tiene traccia solamente di una sola cattiva commettere, quindi si sono tenuti a ripristinare l'arbitro refs/bisect/bad ad un noto cattivo impegnarsi con

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

      Probabilmente sarà necessario dare un'occhiata al registro di bisect (sotto .git/BISECT_LOG o tramite git bisect log) per scoprire a quale commit eseguire il reset del ref refs/bisect/bad.

  2. Oltre agli arbitri, git bisect registra tutte le sue azioni in un registro situato a .git/BISECT_LOG. Mentre questo registro è irrilevante per il normale funzionamento, giocherellare da solo con gli arbitri porterà a un registro privo di senso. Ovviamente, è possibile ignorarlo o correggere il registro di conseguenza, ma ciò non sarebbe migliore della soluzione che è stata collegata.

Quindi, sì, questo può essere fatto, ma c'è un prezzo da pagare. Tutto sommato, salvare il registro, ripararlo e riprodurlo sembra essere l'alternativa migliore.

Problemi correlati