Πώς να γίνετε ειδικός της Git

«Φωτογράφηση του χρόνου που ο άνθρωπος στέκεται δίπλα στο δρόμο και τη γέφυρα κατά τη διάρκεια της ημέρας» από τον Ahsan Avi στο Unsplash

Έκανα λάθος στη δέσμευσή μου, πώς μπορώ να το διορθώσω;

Το ιστορικό της δέσμευσης μου είναι ένα χάος, πώς μπορώ να το καταστήσω πιο ακριβό;

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

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

Έκανα λάθος στη δέσμευσή μου. Τι πρέπει να κάνω?

Σενάριο 1

Ας υποθέσουμε ότι έχετε δεσμευτεί μια δέσμη αρχείων και έχετε συνειδητοποιήσει ότι το μήνυμα δέσμευσης που εισάγετε δεν είναι στην πραγματικότητα σαφές. Τώρα θέλετε να αλλάξετε το μήνυμα δέσμευσης. Για να γίνει αυτό, μπορείτε να χρησιμοποιήσετε το git commit - amend

git commit --amend -m "Νέο μήνυμα αποστολής"

Σενάριο 2

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

Δεν υπάρχει τίποτα κακό με αυτήν την προσέγγιση. Αλλά, για να διατηρήσετε ένα παλιό ιστορικό δέσμευσης, δεν θα ήταν καλύτερο αν θα μπορούσατε να προσθέσετε με κάποιο τρόπο αυτό το αρχείο στην προηγούμενη δέσμευσή σας; Αυτό μπορεί να γίνει μέσω του git commit - amend επίσης:

git προσθέστε αρχείο6
git commit - amend - no-edit

--no-edit σημαίνει ότι το μήνυμα αποστολής δεν αλλάζει.

Σενάριο 3

Κάθε φορά που κάνετε μια δέσμευση στο Git, η δέσμευση έχει όνομα συγγραφέα και email συγγραφέα συνδεδεμένο με αυτό. Γενικά, όταν ρυθμίζετε το Git για πρώτη φορά, ρυθμίζετε το όνομα του δημιουργού και το ηλεκτρονικό ταχυδρομείο. Δεν χρειάζεται να ανησυχείτε για τα στοιχεία του δημιουργού για κάθε δέσμευση.

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

git config user.email "το email σας"

Ας πούμε ότι ξεχάσατε να διαμορφώσετε το μήνυμα ηλεκτρονικού ταχυδρομείου και έχετε κάνει ήδη την πρώτη σας δέσμευση. Η τροποποίηση μπορεί να χρησιμοποιηθεί για την αλλαγή του συντάκτη της προηγούμενης δέσμευσής σας. Ο συντάκτης της δέσμευσης μπορεί να αλλάξει χρησιμοποιώντας την ακόλουθη εντολή:

git commit --amend - author "Όνομα συγγραφέα <Ηλεκτρονικό ταχυδρομείο συντάκτη>"

Σημειώστε

Χρησιμοποιήστε την εντολή τροποποίησης μόνο στο τοπικό αποθετήριο. Η χρήση της τροποποίησης για το απομακρυσμένο αποθετήριο μπορεί να προκαλέσει πολλή σύγχυση.

Η ιστορία του Commit μου είναι ένα χάος. Πώς μπορώ να το χειριστώ;

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

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

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

Δείτε πώς θα εμφανίζεται το ιστορικό των δεσμεύσεων στην τοπική αποθήκη σας.

Πώς κάνετε το ιστορικό των δεσμεύσεων να φαίνεται πιο ξεκάθαρο;

Αυτό είναι όπου η επιστροφή έρχεται στη διάσωση.

Τι είναι η ανακύκλωση;

Επιτρέψτε μου να το εξηγήσω μέσω ενός παραδείγματος.

Αυτό το διάγραμμα δείχνει τις δεσμεύσεις στον κλάδο απελευθέρωσης και τον κλάδο χαρακτηριστικών σας
  1. Ο κλάδος Release έχει τρεις δεσμεύσεις: Rcommit1, Rcommit2, και Rcommit3.
  2. Δημιουργήσατε το κλάδο της λειτουργίας σας από το κλάδο Release όταν είχε μόνο μία δέσμευση, η οποία είναι Rcommit1.
  3. Έχετε προσθέσει δύο δεσμεύσεις στο κλάδο Feature. Πρόκειται για Fcommit1 και Fcommit2.
  4. Ο στόχος σας είναι να αποκτήσετε τις δεσμεύσεις από τον κλάδο "Release" στον κλάδο "Δυνατότητες".
  5. Πρόκειται να χρησιμοποιήσετε το rebase για να το κάνετε αυτό.
  6. Αφήστε να απελευθερωθεί το όνομα του κλάδου Release και να εμφανιστεί το όνομα του κλάδου Feature.
  7. Η επαναδιαμόρφωση μπορεί να γίνει χρησιμοποιώντας τις ακόλουθες εντολές:
git checkout
git releasing release

Επανεξέταση

Ενώ κάνετε επανεκκίνηση, ο στόχος σας είναι να διασφαλίσετε ότι το υποκατάστημα Feature αποκτά τον πιο πρόσφατο κώδικα από το κλάδο Release.

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

Επιτρέψτε μου να το εξηγήσω με τη βοήθεια ενός διαγράμματος.

Αυτό δείχνει τι κάνει η εσωτερική αναδιοργάνωση:

Βήμα 1

  1. Την στιγμή που εκτελέσετε την εντολή, ο κλάδος Feature επισημαίνεται στο κεφάλι του κλάδου Release.
  2. Τώρα ο κλάδος Feature έχει τρεις δεσμεύσεις: Rcommit1, Rcommit2, και Rcommit3.
  3. Μπορεί να αναρωτιέστε τι συνέβη με τα Fcommit1 και Fcommit2.
  4. Οι δεσμεύσεις παραμένουν εκεί και θα χρησιμοποιηθούν στα παρακάτω βήματα.

Βήμα 2

  1. Τώρα ο Git προσπαθεί να προσθέσει το Fcommit1 στον κλάδο Feature.
  2. Εάν δεν υπάρχει σύγκρουση, η Fcommit1 προστίθεται μετά το Rcommit3
  3. Εάν υπάρχει σύγκρουση, το Git θα σας ειδοποιήσει και θα πρέπει να λύσετε τη σύγκρουση με μη αυτόματο τρόπο. Αφού επιλυθεί η διένεξη, χρησιμοποιήστε τις ακόλουθες εντολές για να συνεχίσετε την επανεκκίνηση
git προσθέστε σταθερό αρχείο
git rebase - συνεχίστε

Βήμα 3

  1. Μόλις προστεθεί το Fcommit1, το Git θα προσπαθήσει να προσθέσει το Fcommit2.
  2. Και πάλι, αν δεν υπάρξει σύγκρουση, το Fcommit2 προστίθεται μετά το Fcommit1 και το rebase είναι επιτυχές.
  3. Αν υπάρχει σύγκρουση, το Git θα σας ειδοποιήσει και θα πρέπει να το λύσετε με μη αυτόματο τρόπο. Χρησιμοποιήστε τις ίδιες εντολές που αναφέρονται στο Βήμα 2 μετά την επίλυση των συγκρούσεων
  4. Αφού ολοκληρωθεί ολόκληρη η αναδημοσίευση, θα παρατηρήσετε ότι το υποκατάστημα Feature έχει Rcommit1, Rcommit2, Rcommit3, Fcommit1 και Fcommit2.

Σημεία που πρέπει να σημειώσετε

  1. Τόσο η Rebase όσο και η Merge είναι χρήσιμες στο Git. Το ένα δεν είναι καλύτερο από το άλλο.
  2. Σε περίπτωση συγχώνευσης, θα έχετε μια δέσμευση συγχώνευσης. Στην περίπτωση μιας επαναγοράς δεν υπάρχει επιπλέον δέσμευση όπως μια δέσμευση συγχώνευσης.
  3. Μια καλή πρακτική είναι να χρησιμοποιήσετε τις εντολές σε διαφορετικά σημεία. Χρησιμοποιήστε το rebase όταν ενημερώνετε την τοπική αποθήκη κωδικών σας με τον πιο πρόσφατο κώδικα από το απομακρυσμένο αποθετήριο. Χρησιμοποιήστε τη συγχώνευση όταν ασχολείστε με αιτήματα έλξης για συγχώνευση του κλάδου Feature back με τον κλάδο Release ή Master.
  4. Η χρήση του Rebase αλλάζει το ιστορικό της δέσμευσης (το καθιστά πιο απλό). Αλλά αυτό που λέγεται, αλλάζοντας την ιστορία της δέσμευσης έχει τους κινδύνους. Έτσι βεβαιωθείτε ότι ποτέ δεν χρησιμοποιείτε rebase σε έναν κώδικα που υπάρχει στο απομακρυσμένο αποθετήριο. Πάντα να χρησιμοποιείτε το rebase μόνο για να αλλάξετε το ιστορικό αποστολών του τοπικού σας κώδικα repo.
  5. Εάν η αναδημοσίευση γίνει σε ένα απομακρυσμένο αποθετήριο, μπορεί να δημιουργήσει πολλή σύγχυση, καθώς άλλοι προγραμματιστές δεν θα αναγνωρίσουν το νέο ιστορικό.
  6. Επίσης, εάν η επαναφορά γίνεται στο απομακρυσμένο αποθετήριο, μπορεί να δημιουργήσει προβλήματα όταν άλλοι προγραμματιστές προσπαθούν να τραβήξουν τον τελευταίο κώδικα από το απομακρυσμένο αποθετήριο. Συνεπώς, επαναλαμβάνω ξανά, πάντα να χρησιμοποιείτε rebase μόνο για το τοπικό αποθετήριο

συγχαρητήρια

Είστε τώρα ένας εμπειρογνώμονας Git

Σε αυτή τη δημοσίευση μάθατε για:

  • τροποποιεί τις δεσμεύσεις
  • rebase

Και οι δύο είναι πολύ χρήσιμες έννοιες. Πηγαίνετε να εξερευνήσετε τον κόσμο του Git για να μάθετε ακόμα περισσότερα.

Σχετικά με τον Συγγραφέα

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

Μη διστάσετε να συνδεθείτε μαζί μου στο λογαριασμό μου στο LinkedIn https://www.linkedin.com/in/aditya1811/

Μπορείτε επίσης να με ακολουθήσετε στο twitter https://twitter.com/adityasridhar18

Η ιστοσελίδα μου: https://adityasridhar.com/

Άλλα μηνύματα από εμένα

Βέλτιστες πρακτικές κατά τη χρήση του Git

Εισαγωγή στο Git

Πώς να χρησιμοποιήσετε αποτελεσματικά το Git