Περισσότερα
Πώς να αλλάξετε τον συγγραφέα της δέσμευσης για μια συγκεκριμένη δέσμευση;
Θέλω να αλλάξω τον συγγραφέα μιας συγκεκριμένης δέσμευσης στο ιστορικό. Δεν είναι η τελευταία δέσμευση.
Γνωρίζω για αυτή την ερώτηση - Πώς μπορώ να αλλάξω τον συγγραφέα μιας δέσμευσης στο git;.
Αλλά σκέφτομαι κάτι, όπου προσδιορίζω το commit με hash ή short-hash.
1928
3
Διαδραστική επαναφορά από ένα σημείο νωρίτερα στο ιστορικό από τη δέσμευση που θέλετε να τροποποιήσετε (
git rebase -i
). Στη λίστα των commits που αναβαθμίζονται, αλλάξτε το κείμενο απόpick
σεedit
δίπλα στο hash του commit που θέλετε να τροποποιήσετε. Στη συνέχεια, όταν το git σας ζητήσει να αλλάξετε το commit, χρησιμοποιήστε αυτό:Για παράδειγμα, αν το ιστορικό των δεσμεύσεών σας είναι
A-B-C-C-D-E-F
με τοF
ωςHEAD
, και θέλετε να αλλάξετε τον συγγραφέα τωνC
καιD
, τότε θα...git rebase -i B
(εδώ είναι ένα παράδειγμα του τι θα δείτε μετά την εκτέλεση της εντολήςgit rebase -i B
)A
, χρησιμοποιήστε την εντολήgit rebase -i --root
C
καιD
απόpick
σεedit
C
.git commit --amend --author="Όνομα συγγραφέα "
git rebase --continue
git commit --amend --author="Όνομα συγγραφέα "
ξανάgit rebase --continue
git push -f
για να ενημερώσετε την προέλευσή σας με τις ενημερωμένες δεσμεύσεις.Οι απαντήσεις στην ερώτηση στην οποία παραπέμψατε είναι καλές απαντήσεις και καλύπτουν την περίπτωσή σας (η άλλη ερώτηση είναι πιο γενική, καθώς αφορά την επανεγγραφή πολλαπλών δεσμεύσεων).
Ως δικαιολογία για να δοκιμάσω το
git filter-branch
, έγραψα ένα σενάριο για να ξαναγράψω το Όνομα Συγγραφέα και/ή το Email Συγγραφέα για μια δεδομένη δέσμευση:Όταν κάνετε
git rebase -i
υπάρχει αυτό το ενδιαφέρον κομμάτι στο έγγραφο:Αν θέλετε να διπλώσετε δύο ή περισσότερες κοινοποιήσεις σε μία, αντικαταστήστε την εντολή
"pick"
για τη δεύτερη και τις επόμενες κοινοποιήσεις με"squash"
ή"fixup"
. Αν οι δεσμεύσεις είχαν διαφορετικούς συγγραφείς, η διπλωμένη δέσμευση θα αποδοθεί στον συγγραφέα της πρώτης δέσμευσης. Το προτεινόμενο μήνυμα δέσμευσης για την αναδιπλωμένη δέσμευση είναι η συνένωση των μηνυμάτων δέσμευσης της πρώτης δέσμευσης και εκείνων με την εντολή"squash"
, αλλά παραλείπει τα μηνύματα δέσμευσης των δεσμεύσεων με την εντολή"fixup"
.A-B-C-D-E-F
,B
καιD
(= 2 commits),τότε μπορείτε να κάνετε:
git config user.name "Correct new name"
git config user.email "correct@new.email"
git commit --allow-empty -m "empty"
git rebase -i B^
B^
επιλέγει τον γονέα τουB
.pick
σεsquash
για αυτά.Παράδειγμα του τι θα σας δώσει το
git rebase -i B^
:Θα σας ζητηθεί να επεξεργαστείτε τα μηνύματα:
και μπορείτε απλά να αφαιρέσετε τις πρώτες γραμμές.