Salve a tutto il forum, Ogni tanto vi frequento qui per capire meglio un po' sulla tecnologia Git, jQuery, HTML5/CSS e Rails (cose del tutto sconosciute per persone che hanno fatto studi con indirizzo NON informatico come me) Questo post vuole soltanto mettere in luce la difficoltà' di trovare le informazioni relativamente a certi semplici problemi (come quelli che io ho al momento e che pero' se non riesci a soluzionarli difficile e' poter continuare) **** AVEVO UN PROBLEMA **** A volte la sovrabbondanza di informazioni può' causare confusione, scoramento, stenti e alla fine molta sfiducia in se stessi (tranquilli non spero che siate voi a farmela ritornare) Allora il mio problema era molto semplice io dopo la mia creazione della APP in Rails facevo il mio primo commit $ git init perfetto! comincio a lavorare e lancio diversi commit dopo ovviamente modifiche del codice $ git add . .............. $ git commit -m "primo commit" $ git commit -m "secondo commit" $ git commit -m "terzo commit" $ git commit -m "quarto commit" usando sempre lo stesso branch ovvero il branch *master (so dell'esistenza del comando "git branch nuovo_branch" ma quando sei all'inizio della scrittura di una app questo tipo di comando lo considero eccessivo) e mi accorgo pero' arrivato a un certo punto che ho commesso una "corbelleria" con il "quarto commit" quindi tutte le modifiche fatte con il "quarto commit" le vorrei completamente eliminare e ritornare alla versione del repository "terzo commit" Facendo una ricerca con il solito Google mi sono imbattuto sui seguenti link (le parole chiavi inserite erano del tipo: "delete a commit git", "return your previous commit" che ho ottenuto smussando le vecchie precedenti parole chiave in quanto all'inizio ero proprio fuori strada): - http://stackoverflow.com/questions/179123/how-do-i... - http://stackoverflow.com/questions/495345/git-remo... - http://www.importahmedeid.com/2012/02/01/how-to-re... ma devo dirvi che stavo cercando una soluzione del tipo "quando vuoi eliminare un commit e ritornare al precedente devi usare il seguente comando" (il terzo link fra quelli suindicati era il più' chiaro sulla soluzione anche se faceva riferimento a XCode una piattaforma che non uso e non capivo perché' Google me lo stava mostrando). Sara' anche dovuto al fatto che la maggior parte delle informazioni su questo argomento e' in inglese? Che dire siamo nati nel posto sbagliato? **** ALLA FINE HO TROVATO LA SOLUZIONE **** dopo aver letto svariate cose ho utilizzato la seguente soluzione 1. fare un bel $ git log commit ce5bc9dc8c184f6f85159959564a1f112e32578 Author: Cluter Vipic <la_mai_email@gmail.com> Date: Sat Jul 7 13:06:58 2012 -0700 quarto commit commit xe5bc9dc8c184f6f85159959564a1f112e32578 Author: Cluter Vipic <la_mai_email@gmail.com> Date: Sat Jul 7 13:05:58 2012 -0700 terzo commit commit 45b0e7762132ebaabfa6226eb1a72556ef91cbe0 Author: Cluter Vipic <la_mai_email@gmail.com> Date: Sat Jul 7 13:04:58 2012 -0700 secondo commit commit 12b0e7762132ebaabfa6226eb1a72556ef91cbe0 Author: Cluter Vipic <la_mai_email@gmail.com> Date: Sat Jul 7 13:03:58 2012 -0700 primo commit **** GIT RESET **** quindi in questo caso il comando da usare per eliminare il 'quarto commit' e' il seguente “git reset –hard ce5bc9dc8c184f6f85159959564a1f112e32578″ quindi successivamente se lanceremo di nuovo il comando $ git log , avremo: commit xe5bc9dc8c184f6f85159959564a1f112e32578 Author: Cluter Vipic <la_mai_email@gmail.com> Date: Sat Jul 7 13:05:58 2012 -0700 terzo commit commit 45b0e7762132ebaabfa6226eb1a72556ef91cbe0 Author: Cluter Vipic <la_mai_email@gmail.com> Date: Sat Jul 7 13:04:58 2012 -0700 secondo commit commit 12b0e7762132ebaabfa6226eb1a72556ef91cbe0 Author: Cluter Vipic <la_mai_email@gmail.com> Date: Sat Jul 7 13:03:58 2012 -0700 primo commit trovare una soluzione del genere non e' stato facile ho impiegato più' di 1 ora che per il tipo di problema mi sembra eccessivo ad ogni modo grazie per l'attenzione e scusate lo sfogo a presto, C
on 2012-07-10 02:08
on 2012-07-10 07:50
C'è una soluzione più veloce (ed IMHO più semplice) che è facendo un rebase interattivo.
on 2012-07-10 09:24
Quello che hai fatto alla fine è corretto ma capisco lo stress e la
paura di perdere il lavoro fatto.
Se il commit che devi eliminare è l'ultimo, come nel tuo caso, la
soluzione è facile come quella che hai trovato.
Come suggerito da Michele, un rebase interattivo ti da più possibilità,
nel tuo caso:
> git rebase -i HEAD~4
che vuol dire "riapplica gli ultimi quattro commit e chiedimi cosa fare
con ciascuno". Ti apre un editor dove puoi rivedere i commit ed
eventualmente "eliminarne" alcuni, non necessariamente l'ultimo o gli
ultimi. Considera però che se cancelli un commit, e il successivo si
basa su di esso, dovrai risolvere un conflitto a mano.
Riguardo la paura di perdere il lavoro, un paio di suggerimenti:
1) in git, branch e tag sono come dei pezzi di scotch che metti sul capo
di un filo. Fino a quando c'è un'etichetta del genere non lo puoi
perdere. Pertanto nel tuo caso, prima di fare il reset potevi fare un
'git branch copy_of_master' che ti avrebbe creato un branch copia di
master a quel dato momento.
2) c'è sempre `git reflog` che è un registro di tutto quello che fai in
git. Fino a quando non gira un `git gc` (garbage collect) trovi tutto,
puoi anche recuperare degli headless commit.
-f
on 2012-07-10 09:42
Mi permetto di segnalare anche http://marklodato.github.com/visual-git-guide/index-en.html per chi come me fa spesso confusione tra i comandi. Simone D'Amico COO @ Metwit.com Follow us: @HowdyClowdy bit.ly/scheduleameeting sim@me.com
on 2012-07-10 11:40
2012/7/10 Simone D'Amico <sim@me.com>: > Mi permetto di segnalare anche http://marklodato.github.com/visual-git-guide/index-en.html per chi come me fa spesso confusione tra i comandi. non la conoscevo, ottimo link! m.
on 2012-07-11 22:15
Salve a tutti, grazie per le risposte e dopo aver letto un po' di cose mi sono accorto che non avevo compreso il comando 'git reset' che non capisco perché' in conclusione non mi elimina il git cosa che invece di aiuta a gestire meglio il comando indicato da "Fabrizio Regini" > git rebase -i HEAD~4 e adesso uso questo perché quello che volevo era proprio la cosa seguente: cancella il commit e ritornare alla situazione della app alla situazione dell'ultimo commit fatto ciao e grazie, C Michele Franzin wrote in post #1068092: > 2012/7/10 Simone D'Amico <sim@me.com>: >> Mi permetto di segnalare anche > http://marklodato.github.com/visual-git-guide/index-en.html per chi come > me fa > spesso confusione tra i comandi. > > > non la conoscevo, ottimo link! > > m.
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.