Εδώ είναι όλες οι εντολές Git που χρησιμοποίησα την περασμένη εβδομάδα και τι κάνουν.

Πιστοποίηση εικόνας: GitHub Octodex

Όπως και οι περισσότεροι αρχάριοι, άρχισα να ψάχνω τις εντολές StackOverflow για Git, και στη συνέχεια να αντιγράψω-επικόλληση απαντήσεων, χωρίς να κατανοώ πραγματικά τι έκαναν.

Πιστοποίηση εικόνας: XKCD

Θυμάμαι να σκέφτομαι, "Δεν θα ήταν ωραίο αν υπήρχε μια λίστα με τις πιο συνηθισμένες εντολές Git μαζί με μια εξήγηση για το γιατί είναι χρήσιμες;"

Λοιπόν, έχω εδώ χρόνια αργότερα να συντάξω έναν τέτοιο κατάλογο και να παρουσιάσω κάποιες βέλτιστες πρακτικές που ακόμη και οι ενδιάμεσοι-προχωρημένοι προγραμματιστές θα πρέπει να βρουν χρήσιμες.

Για να διατηρήσω τα πράγματα πρακτικά, στηρίζω αυτή τη λίστα από τις τρέχουσες εντολές Git που χρησιμοποίησα την προηγούμενη εβδομάδα.

Σχεδόν κάθε προγραμματιστής χρησιμοποιεί το Git, και πιθανότατα το GitHub. Αλλά ο μέσος προγραμματιστής πιθανώς χρησιμοποιεί μόνο αυτές τις τρεις εντολές 99% του χρόνου:

git add --all
git commit-am "<μήνυμα>"
git push master master

Όλα αυτά είναι καλά και καλά όταν εργάζεστε σε μια ομάδα ενός ατόμου, σε ένα hackathon ή σε μια εφαρμογή απόρριψης, αλλά όταν η σταθερότητα και η συντήρηση αρχίζουν να γίνονται προτεραιότητα, ο καθαρισμός δεσμεύεται, ακολουθεί στρατηγική διακλάδωσης και γράφει συνεκτικών μηνυμάτων δέσμευσης γίνεται σημαντική.

Θα ξεκινήσω με τη λίστα των κοινώς χρησιμοποιούμενων εντολών για να διευκολύνουν τους αρχάριους να καταλάβουν τι είναι δυνατό με το Git και στη συνέχεια να προχωρήσουν στην πιο προηγμένη λειτουργία και βέλτιστες πρακτικές.

Κανονικά χρησιμοποιούμενες εντολές

Για να αρχίσετε το Git σε ένα αποθετήριο (repo), απλά πρέπει να πληκτρολογήσετε την ακόλουθη εντολή. Εάν δεν προετοιμάσετε το Git, δεν μπορείτε να εκτελέσετε άλλες εντολές Git μέσα σε αυτό το repo.

git init

Αν χρησιμοποιείτε το GitHub και πιέζετε τον κώδικα σε ένα repo GitHub που είναι αποθηκευμένο στο διαδίκτυο, χρησιμοποιείτε ένα απομακρυσμένο repo. Το προεπιλεγμένο όνομα (επίσης γνωστό ως ψευδώνυμο) για το απομακρυσμένο repo είναι προέλευσης. Εάν έχετε αντιγράψει ένα έργο από το Github, έχει ήδη μια προέλευση. Μπορείτε να δείτε αυτήν την προέλευση με την εντολή git remote -v, η οποία θα εμφανίζει τη διεύθυνση URL του απομακρυσμένου repo.

Εάν έχετε αρχικοποιήσει το δικό σας Git repo και θέλετε να το συσχετίσετε με ένα GitHub repo, θα πρέπει να δημιουργήσετε ένα στο GitHub, να αντιγράψετε την παρεχόμενη διεύθυνση URL και να χρησιμοποιήσετε την εντολή git απομακρυσμένη προσθήκη προέλευσης , με τη διεύθυνση URL που παρέχεται από το GitHub αντικαθιστώντας "". Από εκεί, μπορείτε να προσθέσετε, να δεσμεύσετε και να πιέσετε το απομακρυσμένο repo.

Το τελευταίο χρησιμοποιείται όταν χρειάζεται να αλλάξετε το απομακρυσμένο αποθετήριο. Ας υποθέσουμε ότι αντιγράψατε ένα repo από κάποιον άλλο και θέλετε να αλλάξετε το απομακρυσμένο αποθετήριο από τον αρχικό ιδιοκτήτη στο δικό σας λογαριασμό GitHub. Ακολουθήστε την ίδια διαδικασία με το git απομακρυσμένης προσθήκης προέλευσης, εκτός από τη χρήση set-url αντί για να αλλάξετε το απομακρυσμένο repo.

git remote -v
git απομακρυσμένη προσθήκη προέλευσης 
git remote set-url προέλευση 

Ο πιο συνηθισμένος τρόπος αντιγραφής ενός repo είναι να χρησιμοποιήσετε το git clone, ακολουθούμενο από τη διεύθυνση URL του repo.

Λάβετε υπόψη ότι το απομακρυσμένο αποθετήριο θα συνδεθεί με τον λογαριασμό από τον οποίο έχετε κλωνοποιήσει το repo. Έτσι εάν κλωνοποιήσατε ένα repo που ανήκει σε κάποιον άλλο, δεν θα μπορείτε να προωθήσετε το GitHub μέχρι να αλλάξετε την προέλευση χρησιμοποιώντας τις παραπάνω εντολές.

git clone 

Θα βρείτε γρήγορα τον εαυτό σας χρησιμοποιώντας υποκαταστήματα. Αν δεν καταλαβαίνετε ποια υποκαταστήματα υπάρχουν, υπάρχουν άλλα μαθήματα που είναι πολύ πιο σε βάθος, και θα πρέπει να τα διαβάσετε πριν προχωρήσετε (εδώ είναι ένα).

Το τμήμα εντολών git παραθέτει όλα τα υποκαταστήματα στο τοπικό σας μηχάνημα. Εάν θέλετε να δημιουργήσετε ένα νέο υποκατάστημα, μπορείτε να χρησιμοποιήσετε τη διακλάδωση git <όνομα>, με να αντιπροσωπεύει το όνομα του κλάδου, όπως "master".

Η εντολή <όνομα> εντολής πληρωμής git μεταβαίνει σε υπάρχον υποκατάστημα. Μπορείτε επίσης να χρησιμοποιήσετε την εντολή git checkout -b για να δημιουργήσετε ένα νέο υποκατάστημα και να μεταβείτε αμέσως σε αυτό. Οι περισσότεροι άνθρωποι χρησιμοποιούν αυτό αντί για ξεχωριστές εντολές υποκαταστήματος και ελέγχου.

git branch
git υποκατάστημα <όνομα>
git checkout <όνομα>
git checkout -b <όνομα>

Αν έχετε κάνει μια δέσμη αλλαγών σε ένα υποκατάστημα, ας την αποκαλούμε "ανάπτυξη" και θέλετε να συγχωνεύσετε αυτό το υποκατάστημα ξανά στο κύριο υποκατάστημα σας, χρησιμοποιείτε την εντολή συγχώνευσης git . Θα θελήσετε να ολοκληρώσετε την ολοκλήρωση του κύριου κλάδου και, στη συνέχεια, να εκτελέσετε τη συγχώνευση git για να συγχωνεύσετε την ανάπτυξη στον κύριο κλάδο.

git συγχώνευση <υποκατάστημα>

Αν δουλεύετε με πολλούς ανθρώπους, θα βρεθείτε σε θέση όπου ενημερώθηκε ένα repo στο GitHub, αλλά δεν έχετε τις αλλαγές τοπικά. Αν συμβαίνει αυτό, μπορείτε να χρησιμοποιήσετε το git pull προέλευση για να τραβήξετε τις πιο πρόσφατες αλλαγές από αυτόν τον απομακρυσμένο κλάδο.

git έλξη προέλευσης <υποκατάστημα>

Εάν είστε περίεργοι να δείτε ποια αρχεία έχουν αλλάξει και τι παρακολουθείται, μπορείτε να χρησιμοποιήσετε την κατάσταση git. Αν θέλετε να δείτε πόσο έχει αλλάξει κάθε αρχείο, μπορείτε να χρησιμοποιήσετε το git diff για να δείτε τον αριθμό των γραμμών που έχουν αλλάξει σε κάθε αρχείο.

git status
git diff --stat

Προηγμένες εντολές και βέλτιστες πρακτικές

Σύντομα φτάνετε σε ένα σημείο όπου θέλετε οι δεσμεύσεις σας να φαίνονται ωραίες και να παραμένουν συνεπείς. Μπορεί επίσης να χρειαστεί να διασκεδάσετε με το ιστορικό της δέσμευσής σας για να καταστήσετε ευκολότερη την κατανόηση των δεσμεύσεών σας ή να επαναφέρετε μια τυχαία αλλαγή σπάζοντας.

Η εντολή git log σας επιτρέπει να δείτε το ιστορικό των αποστολών. Θα θελήσετε να το χρησιμοποιήσετε για να δείτε το ιστορικό των δεσμεύσεών σας.

Οι δεσμεύσεις σας θα έρθουν με μηνύματα και ένα hash, που είναι τυχαία σειρά αριθμών και γραμμάτων. Ένα παράδειγμα hash μπορεί να μοιάζει με αυτό: c3d882aa1aa4e3d5f18b3890132670fbeac912f7

git log

Ας πούμε ότι προωθήσατε κάτι που έσπασε την εφαρμογή σας. Αντί να το διορθώσετε και να προωθήσετε κάτι καινούργιο, προτιμάτε να επιστρέψετε μία δέσμευση και να προσπαθήσετε ξανά.

Αν θέλετε να επιστρέψετε εγκαίρως και να εξαργυρώσετε την εφαρμογή σας από προηγούμενη δέσμευση, μπορείτε να το κάνετε αυτόματα χρησιμοποιώντας το hash ως όνομα υποκαταστήματος. Αυτό θα αποσυνδέσει την εφαρμογή σας από την τρέχουσα έκδοση (επειδή επεξεργάζεστε ιστορικό αρχείο αντί για την τρέχουσα έκδοση).

git checkout c3d88eaa1aa4e4d5f

Στη συνέχεια, εάν κάνετε αλλαγές από εκείνο τον ιστορικό κλάδο και θέλετε να πιέσετε ξανά, θα πρέπει να κάνετε μια ώθηση.

Προσοχή: Η ώθηση με δύναμη είναι επικίνδυνη και θα πρέπει να γίνει μόνο αν το χρειάζεστε απολύτως. Θα αντικαταστήσει το ιστορικό της εφαρμογής σας και θα χάσετε ό, τι ήρθε μετά.

git push -f master master

Άλλες φορές δεν είναι πρακτικό να κρατάτε τα πάντα σε μια δέσμευση. Ίσως θέλετε να σώσετε την πρόοδό σας πριν δοκιμάσετε κάτι δυνητικά επικίνδυνο, ή ίσως κάνατε λάθος και θέλετε να αποφύγετε την αμηχανία ότι έχετε ένα λάθος στην ιστορία της έκδοσής σας. Για το λόγο αυτό, έχουμε επαναλάβει.

Ας υποθέσουμε ότι έχετε 4 δεσμεύσεις στην τοπική ιστορία σας (δεν έχετε πιέσει στο GitHub) στο οποίο έχετε προχωρήσει. Οι δεσμεύσεις σας φαίνονται παραπλανητικές και αναποφάσιστες. Μπορείτε να χρησιμοποιήσετε το rebase για να συνδυάσετε όλες αυτές τις δεσμεύσεις σε μια ενιαία, συνοπτική δέσμευση.

git rebase -i HEAD ~ 4

Η παραπάνω εντολή θα ανοίξει τον προεπιλεγμένο επεξεργαστή του υπολογιστή σας (ο οποίος είναι ο Vim εκτός αν το έχετε ρυθμίσει σε κάτι άλλο), με αρκετές επιλογές για το πώς μπορείτε να αλλάξετε τις δεσμεύσεις σας. Θα μοιάζει με τον παρακάτω κώδικα:

επιλέξτε 130deo9 παλαιότερο μήνυμα αποστολής
επιλέξτε 4209fei δεύτερο παλαιότερο μήνυμα αποστολής
επιλέξτε 4390gne το τρίτο παλαιότερο μήνυμα δέσμευσης
επιλέξτε bmo0dne το νεότερο μήνυμα αποστολής

Για να τα συνδυάσουμε, πρέπει να αλλάξουμε την επιλογή επιλογής σε "fixup" (όπως αναφέρει η τεκμηρίωση κάτω από τον κώδικα) για να συγχωνεύσει τις δεσμεύσεις και να απορρίψει τα μηνύματα commit. Σημειώστε ότι στο vim, πρέπει να πατήσετε "a" ή "i" για να μπορέσετε να επεξεργαστείτε το κείμενο και για να αποθηκεύσετε και να βγείτε, πρέπει να πληκτρολογήσετε το πλήκτρο escape ακολουθούμενο από το "shift + z + z". Μη με ρωτάς γιατί, είναι ακριβώς.

επιλέξτε 130deo9 παλαιότερο μήνυμα αποστολής
fixup 4209fei δεύτερο παλαιότερο μήνυμα αποστολής
fixup 4390gne τρίτο παλαιότερο μήνυμα δέσμευσης
fixup bmo0dne νέο μήνυμα δέσμευσης

Αυτό θα συγχωνεύσει όλες τις δεσμεύσεις σας στο commit με το μήνυμα "older message commit".

Το επόμενο βήμα είναι να μετονομάσετε το μήνυμα δέσμευσης. Αυτό είναι εξ ολοκλήρου ζήτημα γνώμης, αλλά εφ 'όσον ακολουθείτε ένα σταθερό μοτίβο, οτιδήποτε κάνετε είναι εντάξει. Σας συνιστώ να χρησιμοποιήσετε τις κατευθυντήριες οδηγίες δέσμευσης που έχουν τεθεί από το Google για το Angular.js.

Για να αλλάξετε το μήνυμα δέσμευσης, χρησιμοποιήστε τη σημαία τροποποίησης.

git commit - amend

Αυτό θα ανοίξει και το vim, και οι κανόνες επεξεργασίας κειμένου και αποθήκευσης είναι οι ίδιοι όπως παραπάνω. Για να δώσετε ένα παράδειγμα ενός καλού μηνύματος εμπιστοσύνης, εδώ ακολουθείτε τους κανόνες από την κατευθυντήρια γραμμή:

προσθήκη: προσθήκη κουμπιού ελέγχου λωρίδων σε σελίδα πληρωμών
- Προσθήκη κουμπιού checkout
- δοκιμές εγγραφής για έλεγχο

Ένα πλεονέκτημα για την τήρηση των τύπων που αναφέρονται στην κατευθυντήρια γραμμή είναι ότι καθιστά ευκολότερη την καταγραφή των αρχείων καταγραφής αλλαγών. Μπορείτε επίσης να συμπεριλάβετε πληροφορίες στο υποσέλιδο (και πάλι, που καθορίζονται στην κατευθυντήρια γραμμή) που αναφέρονται σε θέματα.

Σημείωση: θα πρέπει να αποφύγετε την επανεκκίνηση και την κατάπαυση των δεσμεύσεών σας εάν συνεργαζόμαστε σε ένα έργο και έχετε κωδικό που έχει ωθηθεί στο GitHub. Εάν αρχίσετε να αλλάζετε το ιστορικό εκδόσεων κάτω από τις μύτες των ανθρώπων, θα μπορούσατε να καταλήξετε να δυσκολεύεστε περισσότερο τη ζωή των ανθρώπων με σφάλματα που είναι δύσκολο να εντοπιστούν.

Υπάρχει ένας σχεδόν ατελείωτος αριθμός πιθανών εντολών με το Git, αλλά αυτές οι εντολές είναι ίσως οι μόνες που θα πρέπει να γνωρίζετε για τα πρώτα σας χρόνια προγραμματισμού.

Ο Sam Corcos είναι ο πρωτοπόρος προγραμματιστής και συνιδρυτής των Sightline Maps, η πιο έξυπνη πλατφόρμα για τοπογραφικούς χάρτες 3D εκτύπωσης, καθώς και το LearnPhoenix.io, έναν ενδιάμεσο-προχωρημένο εκπαιδευτικό ιστό για τη δημιουργία επεκτάσιμων εφαρμογών παραγωγής με το Phoenix και το React.