Git Reflog - Τρόπος ανάκτησης ενός διαγραμμένου κλάδου που δεν συγχωνεύτηκε

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

«Έχετε χάσει ποτέ ένα υποκατάστημα, του οποίου ο πηγαίος κώδικας δεν συγχωνεύτηκε ακόμη στον κλάδο« κυκλοφορίας »ή στον« κύριο »κλάδο; Τι γίνεται αν θέλετε να αναδημιουργήσετε έναν διαγραμμένο κλάδο, αν και το έργο του έχει ήδη συγχωνευθεί στον κύριο κλάδο; ' . Λοιπόν, η μόνη λύση σε τέτοια σενάρια είναι Πηγαίνετε Reflog .

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



    1. Τι είναι το Git Reflog;
    2. Πώς και πότε διαγράφεται ένα υποκατάστημα;
    3. Ανακτήστε έναν διαγραμμένο κλάδο
    4. Τι εργασία αποκαθίσταται κατά την ανάκτηση του διαγραμμένου κλάδου;
    5. Υπο-εντολές Git Reflog

Ας ξεκινήσουμε λοιπόν με αυτό το άρθρο.



Εξετάστε ένα σενάριο, ένα mΤο aintainer πρέπει να συγχωνεύσει πολλούς κλάδους χαρακτηριστικών από διαφορετικούς συνεργάτες και, στη συνέχεια, να τους διαγράψει τελικά, αλλά ο κλάδος διαγράφεται κατά λάθος πριν να γίνει η συγχώνευση της εργασίας;

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

Τι είναι το Git Reflog;

οΗ εντολή «reflog» διατηρεί ένα κομμάτι του κάθε αλλαγή που γίνεται στις αναφορές (κλάδοι ή ετικέτες) ενός αποθετηρίου και διατηρεί ένα ιστορικό καταγραφής των κλάδων και των ετικετών που είτε δημιουργήθηκαν τοπικά είτε ελέγχθηκαν. Τα αρχεία καταγραφής αναφοράς, όπως το στιγμιότυπο δέσμευσης του πότε δημιουργήθηκε ο κλάδος ή κλωνοποιήθηκαν, έκαναν check-out, μετονομάστηκαν ή τυχόν δεσμεύσεις που έγιναν στον κλάδο διατηρούνται από και παρατίθενται από την εντολή «reflog».



Σημείωση: Ο κλάδος θα είναι ανακτήσιμος από τον κατάλογο εργασίας σας μόνο εάν ο κλάδος υπήρχε ποτέ στο τοπικό αποθετήριο σας, δηλ. το υποκατάστημα δημιουργήθηκε είτε τοπικά είτε έκανε check-out από ένα απομακρυσμένο αποθετήριο στο τοπικό αποθετήριο για το Git για αποθήκευση των αρχείων καταγραφής ιστορικού αναφοράς.

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

εντολή: πηγαίνετε στο reflog

Τώρα που ξέρετε, τι είναι το Git Reflog, ας μαςπροσπαθήστε να διαγράψετε έναν συγχωνευμένο και έναν μη συγχωνευμένο κλάδο και να δείτε πώς το χειρίζεται το Git;

Βήμα 1: Αναφέρετε τους κλάδους που συγχωνεύονται στο κύριο

Πρώτα, ρίξτε μια ματιά στο « κύριος Υποκατάστημα εάν βρίσκεστε σε κάποιο άλλο υποκατάστημα χρησιμοποιώντας την εντολή:

$ git master checkout

Παραγωγή

Git Checkout Master - Git Reflog - Edureka

Τώρα, για να λάβετε μια λίστα συγχωνευμένων κλάδων, αναφέρετε την ακόλουθη εντολή:

$ git branch - συγχωνεύτηκε

Παραγωγή:

Βήμα 1.1: Στη συνέχεια, διαγράψτε τον συγχωνευμένο κλάδο:

$ git branch -d τεύχος # 902

Παραγωγή:

Το υποκατάστημα «τεύχος # 902» διαγράφηκε επιτυχώς καθώς έχει ήδη συγχωνευθεί στον κλάδο «κύριο».

Βήμα 2: Τώρα, ας παραθέσουμε τους κλάδους που δεν συγχωνεύονται στο κύριο.

Υποκατάστημα $ git - χωρίς συγχώνευση

Παραγωγή

Βήμα 2.2: Τέλος, ας διαγράψουμε έναν μη συγχωνευμένο κλάδο με την ακόλουθη εντολή:

$ git branch -d prepod

Εάν προσπαθήσετε να διαγράψετε έναν από τους κλάδους με μη ολοκληρωμένη εργασία, πείτε 'προπαρασκευαστικός' κλάδος, το git εμφανίζει ένα προειδοποιητικό μήνυμα.

Παραγωγή

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

Πώς και πότε διαγράφεται ένα υποκατάστημα;

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

Ως εκ τούτου, σε τέτοια σενάρια, θα μπορούσαν να υπάρχουν 3 περιπτώσεις όπου ένα υποκατάστημα διαγράφεται σε πραγματικό σενάριο με πολλούς συντελεστές να εργάζονται σε ένα μεγάλο έργο. Τα ακόλουθα θα μπορούσαν να είναι τα περιστατικά:

Περίπτωση 1 - Ένας προγραμματιστής μπορεί να συγχωνεύσει ή να διαγράψει τον κλάδο

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

Εντολή: «Git branch -d branch_name»

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

Εντολή: «Git branch -D branch_name»

Με την παραπάνω εντολή, ο προγραμματιστής είναιδιαγράψτε δυναμικά τον κλάδο που παρακάμπτει την προειδοποίηση git

$ git branch -D preprod

Παραγωγή

Σημείωση : Ο κλάδος «preprod» δεν θα εμφανίζεται πλέον όταν εκτελείτε την εντολή «git branch». Λοιπόν, yη δουλειά μας που έχει αποθηκευτεί σε αυτόν τον κλάδο θα χαθεί.

Περίπτωση 2 - Ένας προγραμματιστής διαγράφει έναν κλάδο σε ένα κοινόχρηστο αποθετήριο

Εξετάστε ένα σενάριο, όπου ένας προγραμματιστής με πρόσβαση ανάγνωσης / εγγραφής προσπαθεί να διαγράψει τον απομακρυσμένο κλάδο δυναμικά απόχρησιμοποιώντας την εντολή 'git push' με τη σημαία '- διαγραφή'.

$ git push origin - διαγραφή γρήγορης επιδιόρθωσης

Παραγωγή

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

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

Περίπτωση 3 - Ένα σενάριο αγκίστρου με εξαιρετικά προνόμια διαγράφει τον κλάδο

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

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

Ανακτήστε έναν διαγραμμένο κλάδο χρησιμοποιώντας το Git Reflog

Βήμα 1 : Ιστορικά αρχεία όλων των αναφορών

Λάβετε μια λίστα με όλα τα τοπικά αρχεία καταγραφής ιστορικού για όλες τις αναφορές ('master', 'uat' και 'prepod') σε αυτό το αποθετήριο.

πηγαίνετε στο reflog

Βήμα 2 : Προσδιορίστε τη σφραγίδα ιστορικού

Όπως μπορείτε να αναφέρετε από το παραπάνω στιγμιότυπο, το Αναγνωρισμένο αναγνωριστικό δέσμευσης: e2225bb μαζί με τον δείκτη HEAD: 4 είναι αυτό όταν « μεταπώληση Το υποκατάστημα δημιουργήθηκε από τον τρέχοντα δείκτη HEAD που δείχνει την τελευταία σας εργασία.

Βήμα 3 : Αναρρώνω

Για να ανακτήσετε το 'Μεταπώληση «Κλάδος χρησιμοποιήστε την εντολή«Git checkout» που περνά την αναφορά δείκτη HEAD με το αναγνωριστικό ευρετηρίου - 4.Αυτή είναι η αναφορά του δείκτη όταν δημιουργήθηκε ο κλάδος «preprod», το long id id που επισημάνθηκε στο στιγμιότυπο οθόνης εξόδου.

git checkout -b preprod HEAD @ {4}

Παραγωγή

Και voila! « μεταπώληση «Το υποκατάστημα ανακτάται πίσω με όλο τον πηγαίο κώδικα.

ΣΗΜΕΙΩΣΗ : Επιτρέψτε μου βεπαναλάβετε την εντολή 'git checkout' που χρησιμοποιείται παραπάνω και θα σας βοηθήσουμε να κατανοήσετε καλύτερα:

Η εντολή «git checkout» είναι μια υπερφορτωμένη εντολή (Όπως ακριβώς και με οποιαδήποτε υπερφορτωμένη λειτουργία Java). Αυτό είναι το μέρος όπου ανακτάται ο πραγματικός κλάδος.

Αυτή η μεμονωμένη εντολή ελέγχει πρώτα την προγενέστερη χρονική σήμανση ιστορικού που υποδεικνύεται από το Δείκτης HEAD @ {4} και, στη συνέχεια, δημιουργεί έναν κλάδο με το όνομα «preprod» χρησιμοποιώντας την επιλογή «-b» καθώς και αλλάζει τον κατάλογο εργασίας σας στον νέο κλάδο.

Αυτό σημαίνει ότι ο κλάδος που αλλάζει θα είναι από «master» σε ‘preprod’ όπως υποδεικνύεται στην οθόνη εξόδου.Τώρα θα μπορούσατε να το συγχωνεύσετε με το 'master' ή το 'release' σύμφωνα με το μοντέλο διακλάδωσης.

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

Τι εργασία αποκαθίσταται κατά την ανάκτηση του διαγραμμένου κλάδου;

Τα αρχεία που έχουν αποθηκευτεί και αποθηκευτεί στη λίστα ευρετηρίου stash θα ανακτηθούν. Τυχόν μη παρακολουθημένα αρχεία θα χαθούν. Επίσης εγώΕίναι καλή ιδέα να σκηνοθετείτε και να δεσμεύετε πάντα τη δουλειά σας ή να τις αποθηκεύετε.

Για να ανακτήσετε τις αναφορές καταγραφής ενός συγκεκριμένου κλάδου ή ετικέτας εκτελέστε την εντολή - 'git reflog'.

Παράδειγμα: Για να ελέγξετε μόνο τις αναφορές καταγραφής του κλάδου «uat» χρησιμοποιήστε την εντολή - «git reflog uat».

Υπο-εντολές Git Reflog

πηγαίνετε στο reflog

Εντολή για να ανοίξετε τη σελίδα εγχειριδίων

$ git reflog - βοήθεια

Παραγωγή

πηγαίνετε στο reflog προβολή

Εμφανίζει τα αρχεία καταγραφής της αναφοράς που παρέχεται στη γραμμή εντολών.

git reflog show master @ {0}

πηγαίνετε στο reflog εκπνέω

Αυτή η εντολή χρησιμοποιείται για να κλαδεύετε τις παλαιότερες καταχωρίσεις reflog.

Λήγει το git reflog

πηγαίνετε στο reflog διαγράφω

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

git reflog διαγραφή

πηγαίνετε στο reflog υπάρχει

Αυτή η εντολή ελέγχει εάν ένα ref (κλάδος ή ετικέτα) έχει καταχωρήσεις ιστορικού reflog - log.

υπάρχει git reflog

Εκτός από τις προαναφερθείσες εντολές, η εντολή 'Git Reflog' λαμβάνει διάφορες υπο-εντολές και διαφορετικές επιλογές ανάλογα με τις υπο-εντολές που αναφέρονται παραπάνω. Για περαιτέρω ανάγνωση τρέξτε ' git reflog - βοήθεια Από το παράθυρο του τερματικού.

Με αυτό, καταλήγουμε σε αυτό το άρθρο σχετικά με το Git Reflog.Η πρόθεση του DevOps είναι να δημιουργήσουμε λογισμικό καλύτερης ποιότητας πιο γρήγορα και με μεγαλύτερη αξιοπιστία, ενώ ταυτόχρονα προσκαλούμε μεγαλύτερη επικοινωνία και συνεργασία μεταξύ ομάδων. Εάν σας ενδιαφέρει αυτό το άρθρο, γ τσεκάρετε το από την Edureka, μια αξιόπιστη διαδικτυακή εταιρεία εκμάθησης με δίκτυο περισσότερων από 250.000 ικανοποιημένων μαθητών σε όλο τον κόσμο. Το μάθημα Εκπαίδευσης Πιστοποίησης Edureka DevOps βοηθά τους μαθητές να κατανοήσουν τι είναι DevOps και να αποκτήσουν εμπειρία σε διάφορες διαδικασίες και εργαλεία DevOps, όπως Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack και GIT για την αυτοματοποίηση πολλαπλών βημάτων στο SDLC.

Έχετε μια ερώτηση για εμάς; Παρακαλώ αναφέρετέ το στην ενότητα σχολίων του άρθρου 'Git Reflog' και θα επικοινωνήσουμε μαζί σας το συντομότερο δυνατόν.

ποια είναι η διαφορά μεταξύ hashmap και hashtable