Dr.Fuzzy Δημοσ. 12 Οκτωβρίου 2018 Δημοσ. 12 Οκτωβρίου 2018 (επεξεργασμένο) Τα φώτα σας παίδες. Θέλω να διορθώσω κάποια commit messages. Ηδη γνωρίζω ότι μπορεί να γίνει με git rebase -i root και μαρκάροντας τα commit που θέλω να διορθώσω με r (reword). Μέχρι εδώ καλά. To πρόβλημα που έχω είναι α) ότι δεν διατηρούνται τα tags, που άντε έστω μπορώ να τα δημιουργήσω ξανά και β) το πιο σημαντικό, ότι μετά το rebase απλά δημιουργούνται νέα commits με την ημερομηνία και ώρα του rebase και προφανώς γίνονται overwrite οι ημερομηνίες των αρχικών commits. Αυτό που θέλω είναι να διορθώσω τα commit messages που θα επιλέξω αλλά να μην αλλάξει το commit hash και κατά συνέπεια η ημερομηνία/ώρα (ξέρω ότι είναι history vandalization hack αλλά πρόκειται απλώς για διόρθωση γραμματικών λαθών!) Επεξ/σία 12 Οκτωβρίου 2018 από Dr.Fuzzy
mad-proffessor Δημοσ. 12 Οκτωβρίου 2018 Δημοσ. 12 Οκτωβρίου 2018 Δε νομίζω ότι γίνεται κάτι τέτοιο. Αν λάβεις υπόψη ότι κάθε commit έχει μοναδικό hash βάσει αλγορίθμου, ουσιαστικά το rebase κάνει και rehashing. Άρα ουσιαστικά θα μπορείς να αλλάξεις το commit message αλλά φτιάχνεις ένα νέο commit για το commit.
Dr.Fuzzy Δημοσ. 12 Οκτωβρίου 2018 Μέλος Δημοσ. 12 Οκτωβρίου 2018 (επεξεργασμένο) 23 minutes ago, mad-proffessor said: Δε νομίζω ότι γίνεται κάτι τέτοιο. Αν λάβεις υπόψη ότι κάθε commit έχει μοναδικό hash βάσει αλγορίθμου, ουσιαστικά το rebase κάνει και rehashing. Άρα ουσιαστικά θα μπορείς να αλλάξεις το commit message αλλά φτιάχνεις ένα νέο commit για το commit. Ναι το ξέρω, παρόλα αυτά είμαι σχεδόν σίγουρος ότι κάπου παλιά το είχα βρει με καποιο brute hack. Επεξ/σία 12 Οκτωβρίου 2018 από Dr.Fuzzy
imitheos Δημοσ. 12 Οκτωβρίου 2018 Δημοσ. 12 Οκτωβρίου 2018 (επεξεργασμένο) % git log --pretty=oneline 90ad18418c2d3db23ee827cdd74fed2ca9b70a18 (HEAD -> master, origin/master) Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 6b9bab550cac108d86c731c207e3e74ea10eb638 Merge branch 'net-dsa-bcm_sf2-Couple-of-fixes' 54baca096386d862d19c10f58f34bf787c6b3cbe net: dsa: bcm_sf2: Call setup during switch resume % git cat-file -t 54baca096 commit % git cat-file -p 54baca096 tree 03791696cc800c5e8f1461b45f72d17893639e61 parent bf3b452b7af787b8bf27de6490dc4eedf6f97599 author Florian Fainelli <[email protected]> 1539128938 -0700 committer David S. Miller <[email protected]> 1539296394 -0700 net: dsa: bcm_sf2: Call setup during switch resume There is no reason to open code what the switch setup function does, in fact, because we just issued a switch reset, we would make all the register get their default values, including for instance, having unused port be enabled again and wasting power and leading to an inappropriate switch core clock being selected. Fixes: 8cfa94984c9c ("net: dsa: bcm_sf2: add suspend/resume callbacks") Signed-off-by: Florian Fainelli <[email protected]> Signed-off-by: David S. Miller <[email protected]> Όπως βλέπεις, το commit object αποτελείται από το hash του tree όπως αυτό βρίσκεται εκείνη τη στιγμή, τον committer, την ημερομηνία και το commit message. Έτσι η παραμικρή αλλαγή (με rebase, filter-branch ή όπως και να γίνει αυτή) στο commit message θα παράξει διαφορετικό hash. Μήπως θυμάσαι κάποια παρεμφερή περίπτωση που άλλαζε κάτι άλλο ? Εκτός αν θυμάσαι τις notes. Οι notes χρησιμοποιούνται για ένα κάρο χακιές επειδή είναι ξεχωριστά objects και δεν επηρρεάζουν το commit hash. Είναι όμως πολύ μανούρα. Από την μάνα του το git-log δεν τις εμφανίζει, δεν γίνονται push/pull αυτόματα, κτλ. Επεξ/σία 12 Οκτωβρίου 2018 από imitheos
Aggeluska Δημοσ. 12 Οκτωβρίου 2018 Δημοσ. 12 Οκτωβρίου 2018 13 minutes ago, imitheos said: % git log --pretty=oneline 90ad18418c2d3db23ee827cdd74fed2ca9b70a18 (HEAD -> master, origin/master) Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 6b9bab550cac108d86c731c207e3e74ea10eb638 Merge branch 'net-dsa-bcm_sf2-Couple-of-fixes' 54baca096386d862d19c10f58f34bf787c6b3cbe net: dsa: bcm_sf2: Call setup during switch resume % git cat-file -t 54baca096 commit % git cat-file -p 54baca096 tree 03791696cc800c5e8f1461b45f72d17893639e61 parent bf3b452b7af787b8bf27de6490dc4eedf6f97599 author Florian Fainelli <[email protected]> 1539128938 -0700 committer David S. Miller <[email protected]> 1539296394 -0700 net: dsa: bcm_sf2: Call setup during switch resume There is no reason to open code what the switch setup function does, in fact, because we just issued a switch reset, we would make all the register get their default values, including for instance, having unused port be enabled again and wasting power and leading to an inappropriate switch core clock being selected. Fixes: 8cfa94984c9c ("net: dsa: bcm_sf2: add suspend/resume callbacks") Signed-off-by: Florian Fainelli <[email protected]> Signed-off-by: David S. Miller <[email protected]> Όπως βλέπεις, το commit object αποτελείται από το hash του tree όπως αυτό βρίσκεται εκείνη τη στιγμή, τον committer, την ημερομηνία και το commit message. Έτσι η παραμικρή αλλαγή (με rebase, filter-branch ή όπως και να γίνει αυτή) στο commit message θα παράξει διαφορετικό hash. Μήπως θυμάσαι κάποια παρεμφερή περίπτωση που άλλαζε κάτι άλλο ? Εκτός αν θυμάσαι τις notes. Οι notes χρησιμοποιούνται για ένα κάρο χακιές επειδή είναι ξεχωριστά objects και δεν επηρρεάζουν το commit hash. Είναι όμως πολύ μανούρα. Από την μάνα του το git-log δεν τις εμφανίζει, δεν γίνονται push/pull αυτόματα, κτλ. Από Baldurs Gate είναι το logo αυτό; Κάτι Μ θυμίζει.
Dr.Fuzzy Δημοσ. 12 Οκτωβρίου 2018 Μέλος Δημοσ. 12 Οκτωβρίου 2018 10 minutes ago, imitheos said: % git log --pretty=oneline 90ad18418c2d3db23ee827cdd74fed2ca9b70a18 (HEAD -> master, origin/master) Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 6b9bab550cac108d86c731c207e3e74ea10eb638 Merge branch 'net-dsa-bcm_sf2-Couple-of-fixes' 54baca096386d862d19c10f58f34bf787c6b3cbe net: dsa: bcm_sf2: Call setup during switch resume % git cat-file -t 54baca096 commit % git cat-file -p 54baca096 tree 03791696cc800c5e8f1461b45f72d17893639e61 parent bf3b452b7af787b8bf27de6490dc4eedf6f97599 author Florian Fainelli <[email protected]> 1539128938 -0700 committer David S. Miller <[email protected]> 1539296394 -0700 net: dsa: bcm_sf2: Call setup during switch resume There is no reason to open code what the switch setup function does, in fact, because we just issued a switch reset, we would make all the register get their default values, including for instance, having unused port be enabled again and wasting power and leading to an inappropriate switch core clock being selected. Fixes: 8cfa94984c9c ("net: dsa: bcm_sf2: add suspend/resume callbacks") Signed-off-by: Florian Fainelli <[email protected]> Signed-off-by: David S. Miller <[email protected]> Όπως βλέπεις, το commit object αποτελείται από το hash του tree όπως αυτό βρίσκεται εκείνη τη στιγμή, τον committer, την ημερομηνία και το commit message. Έτσι η παραμικρή αλλαγή (με rebase, filter-branch ή όπως και να γίνει αυτή) στο commit message θα παράξει διαφορετικό hash. Μήπως θυμάσαι κάποια παρεμφερή περίπτωση που άλλαζε κάτι άλλο ? Εκτός αν θυμάσαι τις notes. Οι notes χρησιμοποιούνται για ένα κάρο χακιές επειδή είναι ξεχωριστά objects και δεν επηρρεάζουν το commit hash. Είναι όμως πολύ μανούρα. Από την μάνα του το git-log δεν τις εμφανίζει, δεν γίνονται push/pull αυτόματα, κτλ. Ναι καταλαβαίνω γιατι συμβαίνει. Με filter branch επίσης το έχω δοκιμάσει και έχει το ίδιο αποτέλεσμα όπως είναι αναμενόμενο. Δυστυχώς δε θυμάμαι αν είναι με notes, κυριολεκτικά πάνε αρκετά χρόνια που το είδα και δεν είχα δώσει ιδιαίτερη σημασία τότε, απλά κάπου αμυδρά θυμάμαι κάποιο hack workaround. Άμα έχεις όρεξη δώσε μια λύση με notes και το δοκιμάζω.
imitheos Δημοσ. 12 Οκτωβρίου 2018 Δημοσ. 12 Οκτωβρίου 2018 14 λεπτά πριν, Aggeluska είπε Από Baldurs Gate είναι το logo αυτό; Κάτι Μ θυμίζει. Ναι το σύμβολο (ένα από αυτά) του Bhaal. 10 λεπτά πριν, Dr.Fuzzy είπε Ναι καταλαβαίνω γιατι συμβαίνει. Με filter branch επίσης το έχω δοκιμάσει και έχει το ίδιο αποτέλεσμα όπως είναι αναμενόμενο. Δυστυχώς δε θυμάμαι αν είναι με notes, κυριολεκτικά πάνε αρκετά χρόνια που το είδα και δεν είχα δώσει ιδιαίτερη σημασία τότε, απλά κάπου αμυδρά θυμάμαι κάποιο hack workaround. Άμα έχεις όρεξη δώσε μια λύση με notes και το δοκιμάζω. % git notes add -m "Test note" c69da5b4 % git log --pretty=short --notes commit b53da38673dc82147fe6e9071c2e2f1105501861 (HEAD -> master) Author: imitheos <null> Add file f2 commit c69da5b4a30809bbc4bae2d9afac10e38e50be8c Author: imitheos <null> Add file f1 Notes: Test note Έκανα μια δοκιμή σε ένα τεστ repo αλλά μπορώ μόνο να προσθέσω κάτι στο commit message και όχι να το αλλάξω. Δεν έχω καθόλου εμπειρία από git-notes. 1
Επισκέπτης Δημοσ. 12 Οκτωβρίου 2018 Δημοσ. 12 Οκτωβρίου 2018 Δέν νομίζω να γίνεται αυτό που προσπαθείς να κάνεις για ευνόητους λόγους
pmav99 Δημοσ. 12 Οκτωβρίου 2018 Δημοσ. 12 Οκτωβρίου 2018 Αν σε ενδιαφέρει μόνο για τις ημερομηνίες μπορείς να τις αλλάξεις όταν κάνεις amend. To διαφορετικό hash δεν νομίζω ότι μπορείς να το αποφύγεις
imitheos Δημοσ. 12 Οκτωβρίου 2018 Δημοσ. 12 Οκτωβρίου 2018 (επεξεργασμένο) 3 ώρες πριν, Dr.Fuzzy είπε To πρόβλημα που έχω είναι β) το πιο σημαντικό, ότι μετά το rebase απλά δημιουργούνται νέα commits με την ημερομηνία και ώρα του rebase και προφανώς γίνονται overwrite οι ημερομηνίες των αρχικών commits. Αυτό που θέλω είναι να διορθώσω τα commit messages που θα επιλέξω αλλά να μην αλλάξει το commit hash και κατά συνέπεια η ημερομηνία/ώρα (ξέρω ότι είναι history vandalization hack αλλά πρόκειται απλώς για διόρθωση γραμματικών λαθών!) Τώρα που το ξαναδιάβασα, αν αυτό που σε καίει είναι η ημερομηνία τότε μπορείς να κάνεις μια εύκολη hackia. Τα commit hashes θα αλλάξουν εννοείται αλλά η ημερομηνία θα παραμείνει ίδια και μετά θα έχεις αν αλλάξεις τα tags μόνο. Για να είναι εύκολη η διαδικασία, υπάρχει η προϋπόθεση να έχεις ίδιες Author/Commit ημερομηνίες. % git log --pretty=fuller commit d363a1661e0facf63d892113b227494631df4601 (HEAD -> master) AuthorDate: Fri Oct 12 21:05:57 2018 +0300 CommitDate: Fri Oct 12 21:05:57 2018 +0300 Add f2 commit e0277050e62790e579a0e33220a37ac5108a87f9 AuthorDate: Fri Oct 12 21:05:40 2018 +0300 CommitDate: Fri Oct 12 21:05:40 2018 +0300 Add f1 commit 6cf9d977256af4b45e03d477a26b4cedbfef0bf9 AuthorDate: Fri Oct 12 21:05:20 2018 +0300 CommitDate: Fri Oct 12 21:05:20 2018 +0300 Initial commit Ας δούμε το παραπάνω τεστ repo. Χρησιμοποιώ το fuller format για να βλέπουμε και τις δύο ημερομηνίες. Όπως ξέρεις, η git-am υποστηρίζει την παράμετρο --committer-date-is-author-date με την οποία μπορείς να περάσεις ένα patch που να μην χρησιμοποιεί την τρέχουσα ημερομηνία αλλά να είναι σαν να το έκανες commit την ώρα που ο author το έκανε commit. Για κάποιο λόγο όμως (ίσως για ευκολία υλοποίηση της git-rebase), δεν παίζει σε interactive rebase που χρειάζεσαι εσύ για να αλλάξεις τα commit messages. % git rebase -i 6cf9d977 reword e027705 Add f1 reword d363a16 Add f2 % git log --pretty=fuller commit 5855c9805af352863baf7d64f43f319ed8e7a003 (HEAD -> master) AuthorDate: Fri Oct 12 21:05:57 2018 +0300 CommitDate: Fri Oct 12 21:14:29 2018 +0300 Add file f2 commit 462333d89ed3f40773c7cbcaf06607fdc423949b AuthorDate: Fri Oct 12 21:05:40 2018 +0300 CommitDate: Fri Oct 12 21:14:19 2018 +0300 Add file f1 Έκανα interactive rebase επιλέγοντας ένα-commit-πριν από το πρώτο που θέλω να πειράξω και επέλεξα reword για να αλλάξω τα μηνύματα. Έπειτα βλέπουμε δύο πράγματα: α) αλλάξανε τα commit hashes, β) αλλάξανε οι commit ημερομηνίες που δεν το θέλεις. % git rebase --committer-date-is-author-date 6cf9d977 Current branch master is up to date, rebase forced. First, rewinding head to replay your work on top of it... Applying: Add file f1 Applying: Add file f2 % git log --pretty=fuller commit a67b6011e7ae8b6dd34243784a686080007338c6 (HEAD -> master) AuthorDate: Fri Oct 12 21:05:57 2018 +0300 CommitDate: Fri Oct 12 21:05:57 2018 +0300 Add file f2 commit 27226eb56f1b47fbdf86648e871233f55254f9d4 AuthorDate: Fri Oct 12 21:05:40 2018 +0300 CommitDate: Fri Oct 12 21:05:40 2018 +0300 Add file f1 commit 6cf9d977256af4b45e03d477a26b4cedbfef0bf9 Author: imitheos <null> AuthorDate: Fri Oct 12 21:05:20 2018 +0300 Commit: imitheos <null> CommitDate: Fri Oct 12 21:05:20 2018 +0300 Initial commit Τώρα ξανατρέχεις απλή rebase επιλέγοντας το ίδιο commit οπότε μπορείς να χρησιμοποιήσεις την παράμετρο. Βλέπουμε ότι ξαναάλλαξαν για άλλη μία φορά τα hashes αλλά οι ημερομηνίες είναι οι σωστές. Edit: Έσβησα από τα commits τον Author/Committer που δεν μας προσφέρει τίποτα για να μικρύνει λίγο το μήνυμά μου και άφησα μόνο τις ημερομηνίες που μας ενδιαφέρουν. Επεξ/σία 12 Οκτωβρίου 2018 από imitheos
Dr.Fuzzy Δημοσ. 13 Οκτωβρίου 2018 Μέλος Δημοσ. 13 Οκτωβρίου 2018 Λοιπόν, η λύση του ημίθεου δυστυχώς δε δούλεψε. Έκανα git rebase -i --root και mark edit τα commit και ένα ένα amend όπως πρότεινε ο pmav99 με πχ, GIT_COMMITTER_DATE="Thu Oct 11 18:21:58 2018 +0300" git commit --amend --date="Thu Oct 11 18:21:58 2018 +0300" το οποίο μου άλλαξε το author/commit date ΟΚ αλλά πάνω που πήγα να χαρώ, βλέπω ότι μου έχει δημιουργήσει ένα ψιλό μπάχαλο! Έτσι έχει η κατάσταση του repo μου αυτή τη στιγμή (έχω backup φυσικά): git log --graph --full-history --all --pretty=format:"%h%x09%d%x20%s" * 633b50a (tag: v1.4.1, origin/master, origin/HEAD, master) Make code implementation changes * c9cbf42 (tag: v1.4.0) Change output triangulation matrix format * c86ba15 (tag: v1.3.1) Perform code implementation changes * 9ee9b51 (tag: v1.3.0) Improve code * 460d462 (tag: v1.2.0) Adjust code to increase the number of points * b6450b6 (tag: v1.1.1) Correct surface view * 8e46435 (tag: v1.1.0) Improve code * 08a0200 (tag: v1.0.0) Initialized repository * c538aad (HEAD) Make code implementation changes * 91fe524 Improve code * 9b799a0 Adjust code to increase the number of points * 4994363 Correct surface view * d8e31b8 Improve code * 4e36eaa Initialize repository Τελικά κάνοντας push στο remote με git push -u origin master φυσικά πάνε αυτά: * 633b50a (tag: v1.4.1, origin/master, origin/HEAD, master) Make code implementation changes * c9cbf42 (tag: v1.4.0) Change output triangulation matrix format * c86ba15 (tag: v1.3.1) Perform code implementation changes * 9ee9b51 (tag: v1.3.0) Improve code * 460d462 (tag: v1.2.0) Adjust code to increase the number of points * b6450b6 (tag: v1.1.1) Correct surface view * 8e46435 (tag: v1.1.0) Improve code * 08a0200 (tag: v1.0.0) Initialized repository
defacer Δημοσ. 13 Οκτωβρίου 2018 Δημοσ. 13 Οκτωβρίου 2018 54 minutes ago, Dr.Fuzzy said: Έτσι έχει η κατάσταση του repo μου αυτή τη στιγμή (έχω backup φυσικά) Δε θα πω ότι κακώς έχεις backup, αλλά the whole idea με οποιοδήποτε σοβαρό σύστημα source control είναι ότι δεν χρειάζεται. Στην προκειμένη, τα παλιά σου commit είναι ακόμα μέσα στο repo και αν κάνεις reset --hard το branch στο αρχικό tip του είναι πρακτικά σα να έκανες undo τα πάντα. Για να βρεις το αρχικό tip, είτε κοιτάς στο reflog για το commit hash (δουλεύει πάντα), είτε έχεις κάνει από πριν tag/branch σε εκείνο το commit ακριβώς γιατί θες να δοκιμάσεις πράγματα (μεγαλύτερη ευκολία).
Dr.Fuzzy Δημοσ. 13 Οκτωβρίου 2018 Μέλος Δημοσ. 13 Οκτωβρίου 2018 (επεξεργασμένο) 57 minutes ago, imitheos said: Το repo είναι public κάπου ? Το έχω στο bitbucket, όχι δεν είναι public ακόμα. Έχω locally το πειραγμένο που έκανα τις αλλαγές (δεν το έχω κάνει push φυσικά). 12 hours ago, defacer said: Στην προκειμένη, τα παλιά σου commit είναι ακόμα μέσα στο repo και αν κάνεις reset --hard το branch στο αρχικό tip του είναι πρακτικά σα να έκανες undo τα πάντα. Για να βρεις το αρχικό tip, είτε κοιτάς στο reflog για το commit hash (δουλεύει πάντα), είτε έχεις κάνει από πριν tag/branch σε εκείνο το commit ακριβώς γιατί θες να δοκιμάσεις πράγματα (μεγαλύτερη ευκολία). Δε χρειάζεται στη συγκεκριμένη περίπτωση να βρω το αρχικό tip, μπορώ απλά να κάνω git hard —reset v1.4.1 Επεξ/σία 13 Οκτωβρίου 2018 από Dr.Fuzzy
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα