Domanda

Come posso fare per il rollback a uno specifico impegno in git?

La migliore risposta che qualcuno potrebbe dare a me era di usare i periodi git revert X fino a raggiungere il desiderato commettere.

Quindi, diciamo che voglio tornare a un commit che è 20 impegna vecchio, avrei dovuto farlo funzionare 20 volte.

C'è un modo più semplice per fare questo?

Non posso usare di ripristino, perché questo repository è pubblica.

È stato utile?

Soluzione

Prova questo:

git checkout [revision] .

dove [revision] è l'hash commit (per esempio: 12345678901234567890123456789012345678ab).

Non dimenticare la . alla fine, molto importante. In questo modo applicare le modifiche al tutto l'albero. Si dovrebbe eseguire questo comando nella directory principale del progetto Git. Se siete in qualsiasi directory sub, allora questo comando modifica solo i file nella directory corrente. Poi impegnano e si dovrebbe essere buono.

È possibile annullare questa operazione

git reset --hard 

che eliminerà tutte le modifiche dalla directory e messa in scena area di lavoro.

Altri suggerimenti

Per eseguire il rollback ad una specifica commit:

git reset --hard commit_sha

Per far ritirare 10 commette indietro:

git reset --hard HEAD~10

È possibile usare "git revert", come nel seguente post se non si vuole riscrivere la storia

come ripristinare repository Git ad un precedente impegno?

Beh, credo che la domanda è: che cosa si intende per 'ripristinare'? Se non è possibile reset perché è pubblico e si desidera mantenere la storia commit intatto, vuoi dire che si desidera solo la vostra copia di lavoro per riflettere una specifica commesso? Utilizzare git checkout e l'hash commit.

Edit: Come è stato sottolineato nei commenti, utilizzando git checkout senza specificare un ramo vi lascerà in uno stato "nessun ramo". Utilizzare git checkout <commit> -b <branchname> alla cassa in un ramo, o git checkout <commit> . alla cassa nel ramo corrente.

Il manifesto originale recita:

  

La migliore risposta qualcuno mi potrebbe dare era di usare i periodi git revert X fino a quando ho   raggiungere il commit desiderati.

     

Quindi, diciamo che voglio tornare a un commit che è 20 impegna vecchio, avrei   per eseguirlo 20 volte.

     

C'è un modo più semplice per fare questo?

     

Non posso usare RESET causare questo repo è pubblico.

Non è necessario l'utilizzo di tempi git revert X. git revert può accettare un impegnarsi gamma come argomento, in modo che solo bisogno di usare una volta per ripristinare una serie di commit Ad esempio, se si desidera ripristinare le ultime 20 commit:.

git revert --no-edit HEAD~20..

La gamma HEAD~20.. commettere è l'abbreviazione di HEAD~20..HEAD, e significa "iniziare dal 20 th genitore della testa commit e ripristinare tutti i commit dopo che fino a HEAD".

Che vi ritornerà che durano 20 commit, supponendo che nessuno di coloro che sono merge impegna. Se ci sono merge impegna, allora si può non li ripristinare in un unico comando, è necessario ripristinare individualmente con

git revert -m 1 <merge-commit>

Nota anche che ho testato utilizzando una gamma con git revert usando git versione 1.9.0. Se si utilizza una versione precedente di git, utilizzando un intervallo con git revert può o non può funzionare .

In questo caso, è preferibile rispetto git revert git checkout.

Si noti che a differenza di questa risposta che dice di usare git checkout , git revert sarà effettivamente rimuovere tutti i file che sono stati aggiunti in uno qualsiasi dei commit che sei tornando , il che rende questo il modo corretto per ripristinare un intervallo di revisioni.

Documentazione

Passaggio 1: elenco di commit prendere:

git log

Si otterrà lista come in questo esempio:

[Comp:Folder User$ git log
commit 54b11d42e12dc6e9f070a8b5095a4492216d5320
Author: author <author@gmail.com>
Date:   Fri Jul 8 23:42:22 2016 +0300

This is last commit message

commit fd6cb176297acca4dbc69d15d6b7f78a2463482f
Author: author <author@gmail.com>
Date:   Fri Jun 24 20:20:24 2016 +0300

This is previous commit message

commit ab0de062136da650ffc27cfb57febac8efb84b8d
Author: author <author@gmail.com>
Date:   Thu Jun 23 00:41:55 2016 +0300

This is previous previous commit message
...

Passaggio 2: Copia necessario commettere hash e incollarlo per cassa:

git checkout fd6cb176297acca4dbc69d15d6b7f78a2463482f

Questo è tutto.

git read-tree -um @ $commit_to_revert_to

lo farà. E ' "git checkout", ma senza aggiornare HEAD.

È possibile ottenere lo stesso effetto con

git checkout $commit_to_revert_to
git reset --soft @{1}

se si preferisce infilare convenienza comandi insieme.

queste parti con la vostra worktree e l'indice nello stato desiderato, si può solo git commit alla fine.

Non sono sicuro di cosa è cambiato, ma non sono in grado di checkout commettere una specifica senza l'opzione --detach. Il comando completo che ha funzionato per me è stato: git checkout --detach [commit hash]

Per tornare dallo stato distaccato ho dovuto cassa my filiale locale: git checkout master

Diciamo che si lavora su un progetto e dopo un giorno o giù di lì. Si nota una caratteristica è ancora ti dà errori. Ma non si sa quale cambiamento che hai fatto che ha causato l'errore. Quindi devi pescare precedenti commit di lavoro. Per tornare ad una specifica commit:

git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 .

Ok, in modo che commettono funziona per voi. Niente più errori. È individuato il problema. Ora si può tornare a commettere più recente:

git checkout 792d9294f652d753514dc2033a04d742decb82a5 .

e nella verifica di un file specifico prima che ha causato l'errore (nel mio caso io uso esempio Gemfile.lock):

git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 -- /projects/myproject/Gemfile.lock

E questo è un modo per gestire gli errori creati in impegna senza rendersi conto degli errori fino al più tardi.

Vuoi modalità indipendente TESTA?

Se si desidera eseguire il rollback tempo X a un certo impegnarsi con una testa staccata (significa che è possibile non rovinare nulla), quindi con tutti i mezzi, utilizzare il seguente:

(sostituire X con quanti si impegna si desidera tornare indietro)

git checkout HEAD~X

vale a dire. di tornare un commit:

git checkout HEAD~1

Ecco un esempio di farlo

    cd /yourprojects/project-acme 


    git checkout efc11170c78 .

È possibile trovare il commit id relativo ad ogni commit nella sezione commit di GitHub / BitBucket / Gitlab. La sua molto semplice, si supponga che il commit id è 5.889.575 , quindi se si vuole tornare a questa parte nel codice, allora è sufficiente digitare

git checkout 5889575 .

Questo vi porterà a quel punto del tempo nel codice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top