L'intero aspetto del mantenimento di copie "sicure" di un progetto software è la tranquillità: se il tuo progetto dovesse improvvisamente interrompersi, saprai di avere un facile accesso a una versione funzionale e sarai in grado di individuare esattamente dove si trova il problema è stato presentato. A tal fine, la registrazione dei commit è inutile senza la possibilità di annullare le modifiche. Tuttavia, poiché Git ha così tanti componenti, "annullare" può assumere molti significati diversi. Ad esempio, puoi:
Per complicare ulteriormente le cose, ci sono molti modi per annullare un commit. Puoi:
Git ha uno strumento dedicato per ciascuna di queste situazioni. Iniziamo con la directory di lavoro.
Il periodo di tempo immediatamente successivo al salvataggio di una copia sicura di un progetto è di grande innovazione. Potenziato dalla consapevolezza che sei libero di fare nulla vuoi senza danneggiare la base del codice, puoi sperimentare a tuo piacimento. Tuttavia, questa sperimentazione spensierata prende spesso una svolta sbagliata e porta a una directory di lavoro con un mucchio di codice off-topic. Quando raggiungi questo punto, probabilmente vorrai eseguire i seguenti comandi:
git reset --hard HEAD git clean -f
Questa configurazione di git reset
rende la directory di lavoro e lo stage corrispondenti ai file nel commit più recente (anche chiamato CAPO
), cancellando efficacemente tutte le modifiche non eseguite in cingolato File. Per smaltire untracked file, devi usare il pulito
comando. Git è molto attento a rimuovere il codice, quindi devi anche fornire il file -f
opzione per forzare la cancellazione di questi file.
È anche possibile scegliere come target singoli file. Il seguente comando farà sì che un singolo file nella directory di lavoro corrisponda alla versione nel commit più recente.
GIT checkout HEAD
Questo comando non modifica la cronologia del progetto, quindi puoi tranquillamente sostituirlo CAPO
con un ID commit, un ramo o un tag per fare in modo che il file corrisponda alla versione in quel commit. Ma, fallo non prova questo con git reset
, come volontà cambia la tua storia (spiegato in Annullare commit).
git checkout
Durante la configurazione del prossimo commit, di tanto in tanto aggiungi un file extra allo stage. La seguente invocazione di git reset
lo sottrarrà:
git reset HEAD
Omettendo il --difficile
flag dice a Git di lasciare la directory di lavoro da sola (opposta a git reset --hard HEAD
, che resetta ogni file sia nella directory di lavoro che nello stage). La versione a fasi del file corrisponde CAPO
, e la directory di lavoro conserva la versione modificata. Come ci si potrebbe aspettare, questo si traduce in una modifica non modificata nel tuo stato git
produzione.
git reset
Ci sono due modi per annullare un commit usando Git: puoi farlo entrambi reset semplicemente rimuovendolo dalla cronologia del progetto, o è possibile ritornare generando un nuovo impegno che si sbarazza delle modifiche introdotte nell'originale. Annullare l'introduzione di un altro commit può sembrare eccessivo, ma riscrivere la cronologia rimuovendo completamente i commit può avere conseguenze nefaste nei flussi di lavoro multiutente.
Il sempre versatile git reset
può anche essere usato per mossa il CAPO
riferimento.
git reset HEAD ~ 1
Il HEAD ~ 1
parametro di sintassi specifica il commit che si verifica immediatamente prima CAPO
(allo stesso modo, HEAD ~ 2
si riferisce al secondo commit prima CAPO
). Spostando il CAPO
riferimento all'indietro, stai effettivamente rimuovendo il commit più recente dalla cronologia del progetto.
CAPO
a HEAD ~ 1
con git reset
Questo è un modo semplice per rimuovere un paio di commit che hanno virato fuori tema, ma presenta un serio problema di collaborazione. Se altri sviluppatori avessero iniziato a costruire sulla parte superiore del commit che abbiamo rimosso, in che modo si sincronizzerebbero con il nostro repository? Dovrebbero chiederci l'ID del commit sostitutivo, rintracciarlo manualmente nel repository, spostare tutte le modifiche su quel commit, risolvere i conflitti di merge e quindi condividere le loro "nuove" modifiche con tutti ancora. Immagina cosa succederebbe in un progetto open-source con centinaia di contributori ...
Il punto è, non reimpostare i commit pubblici, ma sentiti libero di eliminare quelli privati che non hai condiviso con nessuno. Rivedremo questo concetto più avanti in questa sessione.
Per rimediare ai problemi introdotti ripristinando i commit pubblici, gli sviluppatori Git hanno escogitato un altro modo per annullare i commit: il ripristino. Invece di modificare i commit esistenti, il ripristino aggiunge a nuovo commit che annulla il problema commit:
git revert
Questo prende le modifiche nel commit specificato, capisce come annullarle e crea un nuovo commit con il changeset risultante. Per Git e per altri utenti, il comando di ripristino esegue il look e si comporta come qualsiasi altro commit, semplicemente accade per annullare le modifiche introdotte da un commit precedente.
Questo è il modo ideale per annullare le modifiche che sono già state commesse in un repository pubblico.
Oltre a annullare completamente i commit, puoi anche emendare il commit più recente eseguendo le modifiche come al solito, quindi eseguendo:
git commit --amend
Questo sostituisce il commit precedente invece di crearne uno nuovo, che è molto utile se hai dimenticato di aggiungere un file o due. Per comodità, l'editor di commit è seminato con il messaggio del vecchio commit. Di nuovo, devi stai attento quando si utilizza il --emendare
bandiera, dal momento che riscrive la storia molto simile git reset
.
Questa lezione rappresenta un capitolo da Git in modo succinto, un eBook gratuito dal team di Syncfusion.