Che cosa fa esattamente git rebase --skip?


107

Ho appena fatto un git pull --rebase origin mastere c'è stato un conflitto.

In primo luogo, questo conflitto era in un file che non avevo toccato ed era di circa 10 commit indietro. Perché succede questo?

Poi ho digitato accidentalmente git rebase --skip, e "ha saltato quella patch".

Preoccupato di aver saltato un commit, ho controllato una nuova versione del ramo master e ho fatto una differenza tra il ramo su cui ho fatto il rebase e il nuovo ramo master. Le uniche modifiche che compaiono nel diff sono l'ultima commit, e guardando il log, la patch che è stata "saltata", appare nella cronologia del commit.

Qualcuno può spiegare cosa sta succedendo qui?


11
Come digiti accidentalmente git rebase --skip. Forse a torto? :)
manojlds

3
Ha! Voleva digitare --abort, ma per qualche motivo sconosciuto è uscito come --skip. Non stavo davvero pensando. :)
mrwooster

9
la cronologia della shell è utile in questo (per farti eseguire qualcosa che non volevi).
Florian Klein

Risposte:


60

Fa quello che dice, salta un commit. Se corri rebase --abortin un conflitto successivo durante lo stesso rebase, anche il commit saltato verrà ovviamente annullato.

Se la tua modifica esiste già a monte, Git non sarà in grado di applicare il tuo commit (ma di solito dovrebbe saltarlo automaticamente, se la patch è esattamente la stessa). Il tuo commit verrà ignorato, ma la modifica esisterà ancora nell'HEAD corrente, perché era già stata applicata a monte.

Dovresti davvero assicurarti di non aver rimosso una tua modifica importante;) (usa il reflog per tornare allo stato precedente al rebase)


4
Allora perché il commit viene ancora visualizzato nel registro? E perché il commit mancante ora viene visualizzato nel diff?
mrwooster

3
Sì, il conflitto era già stato risolto a monte ... per qualche motivo git rebase fa apparire vecchi conflitti di unione ... un'altra cosa che mi confonde? ... significa che ha saltato il conflitto, ma ha applicato la patch che ha risolto il conflitto?
mrwooster

3
Hai saltato il tuo commit, che aveva la stessa modifica di un commit a monte. Hai saltato il tuo commit, ma la modifica è stata comunque apportata (perché esisteva già a monte)
knittl

1
@mittal no, non credo --skipsia la strada da percorrere. Salta salterà completamente un commit, eliminando tutte le modifiche apportate in questo commit.
maglia

3
@mittal: pensa a git rebasecome copiare i commit da un ramo a un altro ramo. Quindi, quando salti un commit, il contenuto originale del commit viene saltato e la patch non viene applicata (quindi tutte le modifiche apportate a qualsiasi file non verranno inserite nel tuo ramo di destinazione). Il modo più semplice è impostare un semplice repository git con due rami, diversi commit su ciascuno di essi e quindi provare a rebase e saltare un commit (puoi usare git rebase --interactiveper specificare quali commit verranno copiati ( pick) o saltati ( skip)
knittl
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.