2015-12-24 12 views
7

Stiamo eseguendo git rebase e si stanno verificando conflitti, in cui è necessario utilizzare --continuare dopo aver risolto i conflitti di unione. Tuttavia, sono abituato a eseguire manualmente il commit una volta risolti i conflitti. Dal momento che non vediamo ulteriori commit quando l'intera rebase è completa, a che punto vengono commesse le risoluzioni dei conflitti?Durante Git Rebase, a quale punto vengono commesse le risoluzioni dei conflitti quando si utilizza --continua

risposta

2

Qualsiasi risoluzione dei conflitti che si verifica durante una rebase apparterrà al nuovo commit creato da rebase.

Quindi la risposta diretta alla domanda:

che punto le risoluzioni di conflitti ottenere impegnata?

... è dopo --continue, ma in effetti dopo il completamento dell'intero comando di rebase e il puntatore di diramazione viene aggiornato.

Dal punto di vista di un estraneo, un ramo che è stato ridisegnato sembra che il lavoro è stato eseguito immediatamente dopo la ramificazione e non ha avuto bisogno di alcuna risoluzione dei conflitti perché il lavoro è stato eseguito su quel contenuto.

Questo a volte è preferibile a una fusione, perché il commit storia può essere più facile ragionare su se non ci sono tanti (forse) senza senso merge-commette

2

Aiuta a pensare a un rebase come solo la scrittura di un nuovo sequenza di commit, riapplicando i commit in base a una nuova testa. Se ogni commit può essere applicato automaticamente, ottimo, fallo così. Quando un commit non può essere applicato automaticamente, git ti dice, lascia l'indice nel modo migliore che può essere rappresentato, con i file in conflitto contrassegnati in modo appropriato, quindi dopo aver detto di continuare il rebase, le cose procedono come segue:

Se git rebase --continue trova le modifiche non accettate nell'indice, presume che le modifiche costituiscano i conflitti risolti e la impegna. Richiede un messaggio di commit e lo utilizza per quel commit, quindi riprende la ridefinizione dei commit rimanenti, dopo quello che originariamente ha causato un conflitto.

Se git rebase --continue non vede nulla non impegnato, presume che il conflitto sia stato risolto e commesso manualmente, quindi continua semplicemente con i commit rimanenti nel rebase.

+0

tutto ha senso eccetto per questa parte: "Viene richiesto un messaggio di commit e viene utilizzato per quel commit". Non viene richiesto un messaggio di commit. Grazie per l'aiuto –

Problemi correlati