Git Reset vs Revert vs Rebase

Σε αυτό το άρθρο, θα μάθετε για διαφορετικούς τρόπους παιχνιδιού με δεσμεύσεις στο Git.

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

Επαναφορά Git

Η επαναφορά Git είναι μια σύνθετη εντολή και χρησιμοποιείται για την αναίρεση των αλλαγών.

Μπορείτε να σκεφτείτε την επαναφορά git ως δυνατότητα επαναφοράς. Με την επαναφορά git, μπορείτε να μεταπηδήσετε μεταξύ διαφόρων δεσμεύσεων. Υπάρχουν τρεις τρόποι εκτέλεσης μιας εντολής επαναφοράς git: –soft, –mixed και –hard. Από προεπιλογή, η εντολή git reset χρησιμοποιεί τη μικτή λειτουργία. Σε μια ροή εργασιών επαναφοράς git, τρεις εσωτερικοί μηχανισμοί διαχείρισης του git εμφανίζονται στην εικόνα: HEAD, περιοχή σταδιοποίησης (ευρετήριο) και κατάλογος εργασίας.

Ο κατάλογος εργασίας είναι το μέρος όπου εργάζεστε αυτήν τη στιγμή, είναι το μέρος όπου υπάρχουν τα αρχεία σας. Χρησιμοποιώντας μια εντολή git status, μπορείτε να δείτε τι υπάρχουν όλα τα αρχεία/φάκελοι στον κατάλογο εργασίας.

Η περιοχή σταδίου (Ευρετήριο) είναι όπου το git παρακολουθεί και αποθηκεύει όλες τις αλλαγές στα αρχεία. Οι αποθηκευμένες αλλαγές αντικατοπτρίζονται στον κατάλογο .git. Χρησιμοποιείτε το git add “filename” για να προσθέσετε το αρχείο στην περιοχή σταδίου. Και όπως πριν, όταν εκτελείτε το git status, θα δείτε ποια αρχεία υπάρχουν στην περιοχή σταδίου.

Ο τρέχων κλάδος στο Git αναφέρεται ως HEAD. Δείχνει την τελευταία δέσμευση, η οποία συνέβη στον τρέχοντα κλάδο ολοκλήρωσης αγοράς. Αντιμετωπίζεται ως δείκτης για οποιαδήποτε αναφορά. Μόλις κάνετε ταμείο σε άλλο υποκατάστημα, το HEAD μετακινείται επίσης στο νέο υποκατάστημα.

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

Git Reset Hard

Ο σκοπός της σκληρής επαναφοράς git είναι να μετακινήσετε το HEAD στην καθορισμένη δέσμευση. Θα αφαιρέσει όλες τις δεσμεύσεις που συνέβησαν μετά την καθορισμένη δέσμευση. Αυτή η εντολή θα αλλάξει το ιστορικό δέσμευσης και θα δείξει την καθορισμένη δέσμευση.

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

Όπως μπορείτε να δείτε από την παρακάτω εντολή, αυτή τη στιγμή, δεν υπάρχει τίποτα να δεσμευτεί.

$ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.

(use "git push" to publish your local commits)

nothing to commit, working tree clean

Τώρα, θα δημιουργήσω 3 αρχεία και θα προσθέσω κάποιο περιεχόμενο σε αυτά.

$ vi file1.txt
$ vi file2.txt
$ vi file3.txt

Προσθέστε αυτά τα αρχεία στο υπάρχον αποθετήριο.

$ git add file*

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

$ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.

(use "git push" to publish your local commits)

Changes to be committed:

(use "git restore --staged <file>..." to unstage)

new file:
file1.txt

new file:
file2.txt

new file:
file3.txt

Πριν από τη δέσμευση, επιτρέψτε μου να σας δείξω, αυτή τη στιγμή έχω ένα αρχείο καταγραφής 3 δεσμεύσεων στο Git.

$ git log --oneline
0db602e (HEAD -> master) one more commit
59c86c9 new commit
e2f44fc (origin/master, origin/HEAD) test

Τώρα, θα δεσμευτώ στο αποθετήριο.

$ git commit -m 'added 3 files'
[master d69950b] added 3 files
3 files changed, 3 insertions(+)
create mode 100644 file1.txt
create mode 100644 file2.txt
create mode 100644 file3.txt

Εάν κάνω ls-files, θα δείτε ότι τα νέα αρχεία έχουν προστεθεί.

$ git ls-files
demo
dummyfile
newfile
file1.txt
file2.txt
file3.txt

Όταν εκτελώ την εντολή log στο git, έχω 4 commit και το HEAD δείχνει την πιο πρόσφατη δέσμευση.

$ git log --oneline
d69950b (HEAD -> master) added 3 files
0db602e one more commit
59c86c9 new commit
e2f44fc (origin/master, origin/HEAD) test

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

$ git status
On branch master
Your branch is ahead of 'origin/master' by 3 commits.

(use "git push" to publish your local commits)

Changes not staged for commit:

(use "git add/rm <file>..." to update what will be committed)

(use "git restore <file>..." to discard changes in working directory)

deleted:
file1.txt

no changes added to commit (use "git add" and/or "git commit -a")

Τώρα, θα εκτελέσω την εντολή σκληρής επαναφοράς.

$ git reset --hard
HEAD is now at d69950b added 3 files

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

$ git status
On branch master
Your branch is ahead of 'origin/master' by 3 commits.

(use "git push" to publish your local commits)

nothing to commit, working tree clean

Αν ελέγξω το αρχείο καταγραφής του git, έτσι θα φαίνεται.

$ git log
commit d69950b7ea406a97499e07f9b28082db9db0b387 (HEAD -> master)
Author: mrgeek <[email protected]>
Date:
Mon May 17 19:53:31 2020 +0530

added 3 files

commit 0db602e085a4d59cfa9393abac41ff5fd7afcb14
Author: mrgeek <[email protected]>
Date:
Mon May 17 01:04:13 2020 +0530

one more commit

commit 59c86c96a82589bad5ecba7668ad38aa684ab323
Author: mrgeek <[email protected]>
Date:
Mon May 17 00:54:53 2020 +0530

new commit

commit e2f44fca2f8afad8e4d73df6b72111f2f2fd71ad (origin/master, origin/HEAD)
Author: mrgeek <[email protected]>
Date:
Mon May 17 00:16:33 2020 +0530

test

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

  Πώς να προσθέσετε αριθμούς διαφανειών στο PowerPoint

Εδώ, θα εκτελέσω την εντολή με HEAD^, που σημαίνει ότι θέλω να επαναφέρω την προηγούμενη δέσμευση (μία δέσμευση πίσω).

$ git reset --hard HEAD^
HEAD is now at 0db602e one more commit

Μπορείτε να δείτε ότι ο δείκτης κεφαλής έχει πλέον αλλάξει σε 0db602e από d69950b.

$ git log --oneline
0db602e (HEAD -> master) one more commit
59c86c9 new commit
e2f44fc (origin/master, origin/HEAD) test

Εάν ελέγξετε το αρχείο καταγραφής, η δέσμευση του d69950b έχει φύγει και η κεφαλή δείχνει τώρα στο 0db602e SHA.

$ git log
commit 0db602e085a4d59cfa9393abac41ff5fd7afcb14 (HEAD -> master)
Author: mrgeek <[email protected]>
Date:
Mon May 17 01:04:13 2020 +0530

one more commit

commit 59c86c96a82589bad5ecba7668ad38aa684ab323
Author: mrgeek <[email protected]>
Date:
Mon May 17 00:54:53 2020 +0530

new commit

commit e2f44fca2f8afad8e4d73df6b72111f2f2fd71ad (origin/master, origin/HEAD)
Author: mrgeek <[email protected]>
Date:
Mon May 17 00:16:33 2020 +0530

Test

Εάν εκτελείτε τα αρχεία ls, μπορείτε να δείτε τα file1.txt, file2.txt και files3.txt να μην βρίσκονται πλέον στο χώρο αποθήκευσης, επειδή αυτή η δέσμευση και το αρχείο της αφαιρέθηκαν μετά τη σκληρή επαναφορά.

$ git ls-files
demo
dummyfile
newfile

Git Soft Reset

Ομοίως, τώρα θα σας δείξω ένα παράδειγμα μαλακής επαναφοράς. Σκεφτείτε, έχω προσθέσει ξανά τα 3 αρχεία όπως προαναφέρθηκε και τα δεσμεύσα. Το αρχείο καταγραφής git θα εμφανιστεί όπως φαίνεται παρακάτω. Μπορείτε να δείτε ότι το “soft reset” είναι η πιο πρόσφατη δέσμευσή μου, και το HEAD υποδεικνύει επίσης αυτό.

$ git log --oneline
aa40085 (HEAD -> master) soft reset
0db602e one more commit
59c86c9 new commit
e2f44fc (origin/master, origin/HEAD) test

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

$ git log
commit aa400858aab3927e79116941c715749780a59fc9 (HEAD -> master)
Author: mrgeek <[email protected]>
Date:
Mon May 17 21:01:36 2020 +0530

soft reset

commit 0db602e085a4d59cfa9393abac41ff5fd7afcb14
Author: mrgeek <[email protected]>
Date:
Mon May 17 01:04:13 2020 +0530

one more commit

commit 59c86c96a82589bad5ecba7668ad38aa684ab323
Author: mrgeek <[email protected]>
Date:
Mon May 17 00:54:53 2020 +0530

new commit

commit e2f44fca2f8afad8e4d73df6b72111f2f2fd71ad (origin/master, origin/HEAD)
Author: mrgeek <[email protected]>
Date:
Mon May 17 00:16:33 2020 +0530

test

Τώρα χρησιμοποιώντας τη μαλακή επαναφορά, θέλω να μεταβώ σε μία από τις παλαιότερες δεσμεύσεις με SHA 0db602e085a4d59cfa9393abac41ff5fd7afcb14

Για να το κάνω αυτό, θα εκτελέσω την παρακάτω εντολή. Πρέπει να περάσετε περισσότερους από 6 αρχικούς χαρακτήρες του SHA, δεν απαιτείται το πλήρες SHA.

$ git reset --soft 0db602e085a4

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

$ git log
commit 0db602e085a4d59cfa9393abac41ff5fd7afcb14 (HEAD -> master)
Author: mrgeek <[email protected]>
Date:
Mon May 17 01:04:13 2020 +0530

one more commit

commit 59c86c96a82589bad5ecba7668ad38aa684ab323
Author: mrgeek <[email protected]>
Date:
Mon May 17 00:54:53 2020 +0530

new commit

commit e2f44fca2f8afad8e4d73df6b72111f2f2fd71ad (origin/master, origin/HEAD)
Author: mrgeek <[email protected]>
Date:
Mon May 17 00:16:33 2020 +0530

test

Αλλά η διαφορά εδώ είναι ότι τα αρχεία του commit (aa400858aab3927e79116941c715749780a59fc9) όπου είχα προσθέσει 3 αρχεία εξακολουθούν να βρίσκονται στον κατάλογο εργασίας μου. Δεν έχουν διαγραφεί. Γι’ αυτό θα πρέπει να χρησιμοποιήσετε μαλακή επαναφορά αντί για σκληρή επαναφορά. Δεν υπάρχει κίνδυνος απώλειας των αρχείων στη μαλακή λειτουργία.

$ git ls-files
demo
dummyfile
file1.txt
file2.txt
file3.txt
newfile

Git Revert

Στο Git, η εντολή revert χρησιμοποιείται για την εκτέλεση μιας λειτουργίας επαναφοράς, δηλαδή για την επαναφορά κάποιων αλλαγών. Είναι παρόμοια με την εντολή επαναφοράς, αλλά η μόνη διαφορά εδώ είναι ότι εκτελείτε μια νέα δέσμευση για να επιστρέψετε σε μια συγκεκριμένη δέσμευση. Εν ολίγοις, είναι δίκαιο να πούμε ότι η εντολή git revert είναι μια δέσμευση.

  Πώς να διορθώσετε προβλήματα ενημέρωσης προγραμμάτων οδήγησης Nvidia

Η εντολή Git revert δεν διαγράφει δεδομένα κατά την εκτέλεση της λειτουργίας επαναφοράς.

Ας υποθέσουμε ότι προσθέτω 3 αρχεία και εκτελώ μια λειτουργία git commit για το παράδειγμα επαναφοράς.

$ git commit -m 'add 3 files again'
[master 812335d] add 3 files again
3 files changed, 3 insertions(+)
create mode 100644 file1.txt
create mode 100644 file2.txt
create mode 100644 file3.txt

Το αρχείο καταγραφής θα εμφανίσει τη νέα δέσμευση.

$ git log --oneline
812335d (HEAD -> master) add 3 files again
0db602e one more commit
59c86c9 new commit
e2f44fc (origin/master, origin/HEAD) test

Τώρα θα ήθελα να επιστρέψω σε ένα από τα προηγούμενα commit μου, ας πούμε – “59c86c9 new commit”. Θα έτρεχα την παρακάτω εντολή.

$ git revert 59c86c9

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

Revert "new commit"

This reverts commit 59c86c96a82589bad5ecba7668ad38aa684ab323.

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
# Your branch is ahead of 'origin/master' by 4 commits.
# (use "git push" to publish your local commits)
#
# Changes to be committed:
# modified: dummyfile

Αφού αποθηκεύσετε και κλείσετε το αρχείο, αυτό είναι το αποτέλεσμα που θα λάβετε.

$ git revert 59c86c9
[master af72b7a] Revert "new commit"
1 file changed, 1 insertion(+), 1 deletion(-)

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

$ git log --oneline
af72b7a (HEAD -> master) Revert "new commit"
812335d add 3 files again
0db602e one more commit
59c86c9 new commit
e2f44fc (origin/master, origin/HEAD) test

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

Git Rebase

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

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

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

  Πώς να αφαιρέσετε μια κατοικία ανενεργού παίκτη στο "Animal Crossing: New Horizons"

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

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

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

Επιτρέψτε μου να σας το δείξω πρακτικά.

Έτσι φαίνεται το κύριο υποκατάστημά μου αυτήν τη στιγμή. Έχει 4 δεσμεύσεις.

$ git log --oneline
812335d (HEAD -> master) add 3 files again
0db602e one more commit
59c86c9 new commit
e2f44fc (origin/master, origin/HEAD) test

Θα εκτελέσω την παρακάτω εντολή για να δημιουργήσω και να μεταβώ σε έναν νέο κλάδο που ονομάζεται χαρακτηριστικό, και αυτός ο κλάδος θα δημιουργηθεί από το 2ο commit, δηλαδή 59c86c9

(master)
$ git checkout -b feature 59c86c9
Switched to a new branch 'feature'

Εάν ελέγξετε το αρχείο καταγραφής στον κλάδο χαρακτηριστικών, έχει μόνο 2 δεσμεύσεις που προέρχονται από την κύρια (κύρια γραμμή).

(feature)
$ git log --oneline
59c86c9 (HEAD -> feature) new commit
e2f44fc (origin/master, origin/HEAD) test

Θα δημιουργήσω το χαρακτηριστικό 1 και θα το δεσμεύσω στον κλάδο χαρακτηριστικών.

(feature)
$ vi feature1.txt

(feature)
$ git add .
The file will have its original line endings in your working directory

(feature)
$ git commit -m 'feature 1'
[feature c639e1b] feature 1
1 file changed, 1 insertion(+)
create mode 100644 feature1.txt

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

(feature)
$ vi feature2.txt

(feature)
$ git add .
The file will have its original line endings in your working directory

(feature)
$ git commit -m 'feature 2'
[feature 0f4db49] feature 2
1 file changed, 1 insertion(+)
create mode 100644 feature2.txt

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

(feature)
$ git log --oneline
0f4db49 (HEAD -> feature) feature 2
c639e1b feature 1
59c86c9 new commit
e2f44fc (origin/master, origin/HEAD) test

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

(feature)
$ git rebase master
Successfully rebased and updated refs/heads/feature.

Τώρα θα προχωρήσω και θα πληρώσω το κύριο υποκατάστημα.

(feature)
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 3 commits.

(use "git push" to publish your local commits)

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

(master)
$ git rebase feature
Successfully rebased and updated refs/heads/master.

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

(master)
$ git log --oneline
766c996 (HEAD -> master, feature) feature 2
c036a11 feature 1
812335d add 3 files again
0db602e one more commit
59c86c9 new commit
e2f44fc (origin/master, origin/HEAD) test

Αυτό αφορούσε τις εντολές επαναφοράς, επαναφοράς και επαναφοράς στο Git.

συμπέρασμα

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