Vai a revisione particolare


582

Ho clonato un repository git di un determinato progetto. Posso girare i file allo stato iniziale e quando rivedo i file andare alla revisione 2, 3, 4 ... più recente? Mi piacerebbe avere una visione d'insieme dell'evoluzione del progetto.

Risposte:


876

Utilizzare git checkout <sha1>per verificare un particolare commit.


2
Puoi farlo git log -n1. Ma se git checkoutnon fallito, è uno spreco di sforzi.
Marcelo Cantos,

2
Funziona. Ho dovuto usare sha1 completo (non parziale). E se voglio mettere il progetto in seconda revisione? git logmostra solo il primo commit ora, posso scoprire lo sha1 del prossimo commit?
Xralf,

6
Dovresti usare solo abbastanza sha1 per garantire unicità. Forse hai avuto una sfortunata coincidenza. Git non ha idea del commit "successivo"; la storia è un DAG con tutte le frecce rivolte all'indietro. Dovresti eseguire git log --onelinee incollare l'output in un file di testo per riferimento (le somme sha1 abbreviate che fornisce sono garantite come uniche). Un'altra opzione, se la tua storia è lineare, è capire quanti commit ci sono dal primo commit fino al loro masterutilizzo git checkout master~543(se ci sono 543 commit), quindi git checkout master~542, ecc.
Marcelo Cantos,

20
e come effettuare il checkout al commit corrente da "git checkout <sha1>"?
ア レ ッ ク ス

6
@AlexanderSupertramp Dai un'occhiata al ramo.
Marcelo Cantos,

50

Per passare a una versione / commit particolare eseguire i seguenti comandi. HASH-CODE da cui puoi otteneregit log --oneline -n 10

git reset --hard HASH-CODE

Nota : dopo il ripristino di una versione / commit particolare è possibile eseguire git pull --rebase, se si desidera ripristinare tutti i commit che vengono scartati.


1
Nota che a resetnon solo controlla un particolare punto nel grafico, ma sposta anche il tuo ramo attualmente estratto
Liam

Inoltre reset, tutte le modifiche in sospeso vengono eliminate.
WilliamKF,

2
--hard flag eliminerà tutti i commit dopo detto hash .... probabilmente vorrebbe aggiungere quel po 'di marea qui. Sono sicuro che le persone hanno perso la storia e si sono chiesti perché.
Urasquirrel,

git pull --rebasefunziona solo se hai un telecomando per il tuo repository ed è aggiornato.
Keith Thompson,

19

È possibile ottenere una vista grafica della cronologia del progetto con strumenti come gitk. Corri:

gitk --all

Se desideri effettuare il checkout di un ramo specifico:

git checkout <branch name>

Per un commit specifico, utilizzare l'hash SHA1 anziché il nome del ramo. (Vedi Treeishes nel Git Community Book , che è una buona lettura, per vedere altre opzioni per navigare nel tuo albero.)

git log ha un intero set di opzioni per visualizzare anche la cronologia dettagliata o di riepilogo.

Non conosco un modo semplice per andare avanti nella cronologia di commit. I progetti con una storia lineare probabilmente non sono poi così comuni. L'idea di una "revisione" come quella che avresti fatto con SVN o CVS non si adatta molto bene a Git.


2
Attenzione: git non ti mentirà dandoti un'unica storia lineare del progetto. Questo a meno che il progetto non si sia effettivamente evoluto in quel modo.
Andres Jaan Tack,

Andare avanti è logicamente insignificante (anche in una storia lineare), poiché un commit non fa riferimento al "futuro". Nella migliore delle ipotesi, puoi identificare tutti i commit che hanno il commit in questione come genitore. Intendiamoci, spostarsi all'indietro non è nemmeno un esercizio banale, a causa delle fusioni.
Marcelo Cantos,

5

Utilizzando la chiave SHA1 di un commit, è possibile effettuare le seguenti operazioni:

  • Innanzitutto, trova il commit desiderato per un file specifico:

    git log -n <# commits> <file-name>

    Questo, in base al tuo <# commits>, genererà un elenco di commit per un file specifico.

    SUGGERIMENTO: se non sei sicuro di quello che commettere state cercando, un buon modo per scoprire sta utilizzando il seguente comando: git diff <commit-SHA1>..HEAD <file-name>. Questo comando mostrerà la differenza tra la versione corrente di un commit e una versione precedente di un commit per un file specifico.

    NOTA: la chiave SHA1 di un commit è formattata git log -nnell'elenco di come:

commettere <SHA1 id>

  • In secondo luogo, controlla la versione desiderata:

    Se hai trovato il commit / la versione che desideri, usa semplicemente il comando: git checkout <desired-SHA1> <file-name>

    Ciò inserirà la versione del file specificato nell'area di gestione temporanea. Per estrarlo dall'area di gestione temporanea, utilizzare semplicemente il comando:reset HEAD <file-name>

Per tornare al punto in cui è indicato il repository remoto, utilizzare semplicemente il comando: git checkout HEAD <file-name>


2

Ero in una situazione in cui abbiamo un ramo master, e poi un altro ramo chiamato 17.0 e all'interno di questa 17.0 c'era un hash di commit senza dire "XYZ" . E al cliente viene data una build fino a quella revisione XYZ. Ora abbiamo riscontrato un bug che deve essere risolto per quel cliente. Quindi dobbiamo creare una filiale separata per quel cliente fino a quando l'hash "xyz". Quindi ecco come l'ho fatto.

Innanzitutto ho creato una cartella con quel nome cliente sul mio computer locale. Supponiamo che il nome del cliente sia "AAA" una volta creata la cartella in questione seguendo il comando all'interno di questa cartella:

  1. git init
  2. git clone Dopo questo comando sarai sul ramo principale. Quindi passa al ramo desiderato
  3. git checkout 17.0 Questo ti porterà alla filiale in cui è presente il tuo commit
  4. git checkout Questo richiederà il tuo repository fino a quel hash commit. Vedi il nome del tuo ramo che è stato cambiato in quel hash di commit n. Ora dai un nome di ramo a questo hash
  5. git branch ABC Questo creerà un nuovo ramo sul tuo computer locale.
  6. git checkout ABC
  7. git push origin ABC Questo invierà questo ramo al repository remoto e creerà un ramo sul server git. Hai fatto.

1

Un modo sarebbe quello di creare tutti i commit mai fatti sulle patch. controlla il commit iniziale e quindi applica le patch in ordine dopo la lettura.

usa git format-patch <initial revision>e poi git checkout <initial revision>. dovresti ottenere un mucchio di file nel tuo regista che iniziano con quattro cifre che sono le patch.

quando hai finito di leggere la tua revisione, fai semplicemente quello git apply <filename>che dovrebbe apparire git apply 0001-*e contare.

Ma mi chiedo davvero perché non vorresti semplicemente leggere le patch stesse invece? Per favore pubblica questo nei tuoi commenti perché sono curioso.

il manuale di git mi dà anche questo:

git show next~10:Documentation/README

Mostra i contenuti del file Documentation / README come erano correnti nel decimo ultimo commit della succursale successiva.

potresti anche dare un'occhiata a ciò git blame filenameche ti dà un elenco in cui ogni riga è associata a un hash + autore del commit.


1

Per arrivare a un codice di commit specifico, è necessario il codice hash di quel commit. Puoi ottenere quel codice hash in due modi:

  1. Scarica dal tuo account github / gitlab / bitbucket. (È nel tuo URL di commit, ovvero: github.com/user/my_project/commit/ commit_hash_code ), oppure puoi
  2. git loge controlla i tuoi commit recenti su quella filiale. Ti mostrerà il codice hash del tuo commit e il messaggio che hai lasciato durante il commit del tuo codice. Basta copiare e poi faregit checkout commit_hash_code

Dopo esserti spostato su quel codice, se vuoi lavorarci sopra e apportare modifiche, dovresti fare un altro ramo con git checkout -b <new-branch-name>, altrimenti le modifiche non verranno mantenute.


0

Per verificare un commit (nb stai guardando il passato!).

  • git checkout "commmitHash"

Per riavviare brutalmente da un commit ed eliminare quei rami successivi che probabilmente hai incasinato.

  • git reset --hard "commmitHash"
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.