2015-08-31 20 views
5

Intellij ha una funzione molto interessante in teoria, chiamata Smart Checkout. Questa funzione viene attivata quando cambi i rami e hai file nel ramo corrente che hai modificato ma che non hai eseguito il commit.Annulla Intellij Smart Checkout

Invece di costringervi a eseguire il commit, memorizzare o accantonare le modifiche, le archivia per voi, cambia ramo, quindi esegue stash pop nel nuovo ramo.

Immagino che questo sia ciò che vorresti a volte, ma l'ho eseguito quando si passa al ramo sbagliato.

Quindi, ora il mio ramo master è pieno di modifiche che appartengono a un altro ramo, alcuni file riportano conflitti di unione e ho tutti i tipi di dolore.

Quello che voglio realizzare è:

  1. rimuovere in modo impeccabile i cambiamenti dal ramo principale.
  2. Spostali di nuovo nel ramo in cui stavo lavorando.

C'è un modo per farlo?

+0

A proposito, perdere questi cambiamenti è piuttosto angoscioso ... il lavoro di diversi giorni. Mi piacerebbe riaverli indietro. – mlissner

+2

questo tipo di magia è esattamente il motivo per cui preferisco utilizzare l'integrazione IDE VCS solo per le operazioni di lettura e aggiungere sempre, stash, commit, etc sulla riga di comando. in ogni caso, puoi recuperare le modifiche nascoste (ci sono molte domande ad esso relative qui su SO, ad esempio http://stackoverflow.com/questions/89332/how-to-recover-a-dropped-stash-in-git) facilmente usando utilità git. – ThiefMaster

+0

Utilizzando uno strumento come Atlassian Sourcetree ti avvertirai che le tue modifiche locali verrebbero sovrascritte dalla cassa, il che eviterebbe questa situazione! Penso che il comando come git tool possa fare la stessa cosa, ma non ne sono sicuro al 100%. – mvd

risposta

5

Ecco almeno una risposta parziale che funziona in caso di conflitto di unione durante lo stash pop. Come accennato nella mia domanda, lo stash viene utilizzato dalla funzione Smart Checkout per memorizzare le modifiche locali e quindi per applicarle al nuovo ramo dopo che è stato estratto.

Il modo in cui Intellij lo fa è utilizzare stash nel ramo in cui ci si trova e quindi utilizzare stash pop nel ramo a cui si sta passando.

Quando le modifiche sono nascoste, vengono inserite in una pila di modifiche nascoste, nella parte superiore. Quindi, quando viene eseguito stash pop, tali modifiche vengono eliminate dallo stack e applicate.

Almeno, nella maggior parte dei casi, è quello che succede. Se c'è un conflitto di unione, tuttavia, Intellij ti informa di tale e la riserva viene mantenuta. Si può vedere la pila di stashes eseguendo:

git stash list 

Se la scorta si vuole è ancora elencato, che cosa si può fare è semplicemente checkout il ramo si erano originariamente. Reimpostalo, quindi fai stash apply, che è come stash pop, ma non rimuove la scorta dalla lista. Quindi:

git checkout $original-branch 
git reset HARD 
git stash apply 

Poi, se tutto va bene, è possibile rimuovere la scorta con:

git stash drop 

Dal momento che questa risposta è piuttosto ruvida e copre solo una situazione, sto segnando come un wiki comunità . I miglioramenti sono i benvenuti.