Έχω κάνει κάποιες αλλαγές σε ένα αρχείο το οποίο έχει δεσμευτεί μερικές φορές ως μέρος μιας ομάδας αρχείων, αλλά τώρα θέλω να επαναφέρω/αντιστρέψω τις αλλαγές σε αυτό σε μια προηγούμενη έκδοση.
Έχω κάνει ένα git log
μαζί με ένα git diff
για να βρω την αναθεώρηση που χρειάζομαι, αλλά απλά δεν έχω ιδέα πώς να επαναφέρω το αρχείο στην προηγούμενη κατάστασή του στο παρελθόν.
git checkout -- foo
Αυτό θα επαναφέρει το foo
σε HEAD. Μπορείτε επίσης:
git checkout HEAD^ foo
για μια αναθεώρηση πίσω, κ.λπ.
Περιέργως, το git checkout foo
δεν θα λειτουργήσει αν το αντίγραφο εργασίας βρίσκεται σε έναν κατάλογο με όνομα foo
- ωστόσο, τόσο το git checkout HEAD foo
όσο και το git checkout ./foo
θα λειτουργήσουν:
$ pwd
/Users/aaron/Documents/work/foo
$ git checkout foo
D foo
Already on "foo"
$ git checkout ./foo
$ git checkout HEAD foo
Σημειώστε, ωστόσο, ότι τα git checkout ./foo
και git checkout HEAD ./foo
δεν είναι ακριβώς το ίδιο πράγμα:
$ echo A > foo
$ git add foo
$ git commit -m 'A' foo
Created commit a1f085f: A
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 foo
$ echo B >> foo
$ git add foo
$ echo C >> foo
$ cat foo
A
B
C
$ git checkout ./foo
$ cat foo
A
B
$ git checkout HEAD ./foo
$ cat foo
A
(Η δεύτερη add
σταδιοποιεί το αρχείο στο ευρετήριο, αλλά δεν παίρνει
δεσμευτεί.)
Git checkout ./foo
σημαίνει επαναφορά της διαδρομής ./foo
από το index,
η προσθήκη του HEAD
δίνει εντολή στο Git να επαναφέρει αυτή τη διαδρομή στο ευρετήριο στο
HEAD
αναθεώρηση πριν το κάνει αυτό.