τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
【σχετικό θέμα】
- Θα
commit
Επαναλάβετε την έκδοση σε άλλο κλάδο- Εκτελέστε rebase σε περίπτωση διένεξης έκδοσης
- Εκτελέστε μια διαδραστική επαναφορά σε μια καθορισμένη έκδοση
- Χρήση διαδραστικής επαναφοράς για τη συγκέντρωση εκδόσεων
- Αλλαγή committer με χρήση διαδραστικής επαναφοράς
- Έκδοση αυτόματης συγκέντρωσης
Επαναφορά (Rebasing
) είναι ένα εξαιρετικά ισχυρό χαρακτηριστικό του Git.Το rebasing είναι ένας τύπος λειτουργίας: εάν αcommit
ΕΝΑ Το παλαιότερο βασίστηκε σεcommit
σι του?ΕΝΑ Επαναφορά σεντο, δηλαδή θα ΕΝΑ βασίζονται σεντο λειτουργία.
Στην ακόλουθη περίπτωση επίδειξης, θα διαπιστώσετε ότι το rebasing συχνά δεν είναι τόσο εύκολο όσο φαίνεται.
commit
Επαναλάβετε την έκδοση σε άλλο κλάδο Ας δούμε πρώτα τον απλούστερο τύπο λειτουργίας επαναβάσεως. Σχετικές εργασίες προετοιμασίας: εισαγάγετε ένα νέο αρχείο, υποβάλετε, αλλάξτε το περιεχόμενο και υποβάλετε ξανά.Με αυτόν τον τρόπο, υπάρχουν δύο φορές το τοπικόcommit
Εκδοχή.
Ακόμα με jgit
Βιβλιοθήκη για παράδειγμα:
# Clone jgit repo into chapter4
$ git clone https://git.eclipse.org/r/jgit/jgit chapter4
$ cd chapter4
# Checkout a new branch
$ git checkout -b rebaseExample --track origin/stable-3.1
# Create the 1st commit
$ echo "My Fishtank
Gravel, water, plants
Fish, pump, skeleton" > fishtank.txt
$ git add fishtank.txt
$ git commit -m "My brand new fishtank"
# Create the 2nd commit
$ echo "mosquitos" >> fishtank.txt
$ git add fishtank.txt
$ git commit -m "Feeding my fish"
# Rabase to stable-3.2
$ git rebase origin/stable-3.2
Successfully rebased and updated refs/heads/rebaseExample.
Πριν από την αναβάθμιση:
Μετά την αναβάθμιση:
git rebase
Η διαδικασία εκτέλεσης:
HEAD
Η κοινή έκδοση μεταξύ του κλάδου προορισμού που επισημαίνεται από το rebase (merge-base
);merge-base
, βρείτε όλες τις εκδόσεις που λείπουν στον κλάδο προορισμού.Αν ένα commit
έκδοση ή αbranch
Επαναλάβετε έναν κλάδο σε διαφορετικόHEAD
, είναι πιθανό να προκύψουν διενέξεις έκδοσης.Σε αυτό το σημείο πρέπει να επιλυθεί η διένεξη και να εκτελεστεί η εντολήgit rebase --continue
, η επαναφορά μπορεί να ολοκληρωθεί.
Τα παραδείγματα σε αυτήν την ενότητα καταδεικνύουν τον τρόπο με τον οποίο μπορείτε να ολοκληρώσετε την επαναφορά της βάσης παρουσία συγκρούσεων.Μετά το τελικό αποτέλεσμα που παρουσιάζεται στην Ενότητα 4.1, αυτή τη φοράrebaseExample
Το υποκατάστημα έχει επανατοποθετηθεί σεstable-3.2
κλαδί.Το παράδειγμα θα ελέγξει ξανά τον νέο κλάδο από το stable-3.1 και θα προσθέσει ένα καιrebaseExample
Αρχεία κειμένου με το ίδιο όνομα κλάδου αλλά μη συμβατό περιεχόμενοfishtank.txt
:
# Checkout rebaseExample2
$ git checkout -b rebaseExample2 --track origin/stable-3.1
# Add a new commit
$ echo "My Fishtank
Pirateship, Oister shell
Coconut shell
">fishtank.txt
$ git add fishtank.txt
$ git commit -m "My brand new fishtank"
# Rebase conflicting branches
$ git rebase rebaseExample
Auto-merging fishtank.txt
CONFLICT (add/add): Merge conflict in fishtank.txt
error: could not apply 24f9bf1ef... My brand new fishtank2
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 24f9bf1ef... My brand new fishtank2
$ subl fishtank.txt
Η κατάσταση της σύγκρουσης έχει ως εξής:
Αλλαγή στο ακόλουθο περιεχόμενο, αποθήκευση και κλείσιμο:
Προσθέστε τα συγχωνευμένα αρχεία και συνεχίστε την επαναφορά βάσης:
$ git add fishtank.txt
$ git rebase --continue
hint: Waiting for your editor to close the file...
Ο επεξεργαστής που ανοίγει φαίνεται στο σχήμα:
Επιβεβαιώστε, αποθηκεύστε και κλείστε και θα δείτε ένα μήνυμα ότι η επαναφορά ήταν επιτυχής:
$ git rebase --continue
[detached HEAD 9911772b3] My brand new fishtank2
1 file changed, 2 insertions(+), 3 deletions(-)
Successfully rebased and updated refs/heads/rebaseExample2.
# Check new status via gitk
$ gitk
Λεπτομέρειες έχουν ως εξής:
Μπορεί να φανεί ότι αυτή η επαναφορά θα επαναφέρει μόνο την έκδοση που έχει ο παλιός κλάδος, αλλά ο νέος κλάδος δεν έχει (δηλαδή, προσθέστε μια νέα έκδοση) commit
)。
Στις πληροφορίες προτροπής git της πρώτης διακοπής επαναφοράς, μπορείτε επίσης να δείτε δύο εναλλακτικές:
git rebase --abort
: Ως κυριολεκτική σημασία, διακόψτε την επαναφορά
git rebase --skip
: Παράβλεψη διενέξεων και επαναφορά απευθείας, κάτι που θα έχει ως αποτέλεσμα rebaseExample2
Απορρίψτε το νέοcommit
, συγχωνεύτηκαν άμεσα σε rebaseExample
, έδειξε ο γονέας μετά την επαναφορά και rebaseExample
Σταθερός:
Σε αυτό το παράδειγμα, χρησιμοποιούμε το rebaseExample
Με βάση τους κλάδους, δείξτε πώς να το χρησιμοποιήσετε--interactive
Mark, επαναλάβετε τα δύο στο 4.1commit
Επαναφορά σε κλάδο απομακρυσμένης παρακολούθησηςstable-3.1
ανώτερος:
$ git checkout rebaseExample
Switched to branch 'rebaseExample'
Your branch is ahead of 'origin/stable-3.1' by 109 commits.
(use "git push" to publish your local commits)
$ git rebase origin/stable-3.1
Αυτή τη στιγμή, μια λίστα δέσμευσης θα εμφανιστεί στο νέο αναδυόμενο πρόγραμμα επεξεργασίας, με το εύρος rebaseExample
καιstable-3.1
μεταξύ, όλα μπορούν να βασιστούν σεstable-3.1
τουcommit
Ρεκόρ.Κρατήστε τα δύο νέα στο παράδειγμαcommit
, διαγράψτε όλα τα υπόλοιπα (δηλαδή το περιεχόμενο στη γραμμή 89 και πριν):
Μετά την αποθήκευση, βγείτε από το πρόγραμμα επεξεργασίας και θα δείτε την ακόλουθη έξοδο:
$ git rebase --interactive origin/stable-3.1
Successfully rebased and updated refs/heads/rebaseExample.
# Check in gitk view:
Το αποτέλεσμα είναι το εξής:
Παράδειγμα επέκτασης
Σε αυτό το παράδειγμα, μπορείτε επίσης να επιτύχετε γρήγορα το επιθυμητό αποτέλεσμα μέσω μιας εντολής:
$ git rebase --onto origin/stable-3.1 origin/stable-3.2 rebaseExample
Successfully rebased and updated refs/heads/rebaseExample.
Το διάγραμμα πριν και μετά την αναβάθμιση έχει ως εξής: