Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Τα φώτα σας παίδες. Θέλω να διορθώσω κάποια commit messages. Ηδη γνωρίζω ότι μπορεί να γίνει με git rebase  -i root και μαρκάροντας τα commit που θέλω να διορθώσω με r (reword). Μέχρι εδώ καλά. To πρόβλημα που έχω είναι α) ότι δεν διατηρούνται τα tags, που άντε έστω μπορώ να τα δημιουργήσω ξανά και β) το πιο σημαντικό, ότι μετά το rebase απλά δημιουργούνται νέα commits με την ημερομηνία και ώρα του rebase και προφανώς γίνονται overwrite οι ημερομηνίες των αρχικών commits.

Αυτό που θέλω είναι να διορθώσω τα commit messages που θα επιλέξω αλλά να μην αλλάξει το commit hash και κατά συνέπεια η ημερομηνία/ώρα (ξέρω ότι είναι history vandalization hack αλλά πρόκειται απλώς για διόρθωση γραμματικών λαθών!)

Επεξ/σία από Dr.Fuzzy
Δημοσ.

Δε νομίζω ότι γίνεται κάτι τέτοιο. Αν λάβεις υπόψη ότι κάθε commit έχει μοναδικό hash βάσει αλγορίθμου, ουσιαστικά το rebase κάνει και rehashing. Άρα ουσιαστικά θα μπορείς να αλλάξεις το commit message αλλά φτιάχνεις ένα νέο commit για το commit.

Δημοσ. (επεξεργασμένο)
23 minutes ago, mad-proffessor said:

Δε νομίζω ότι γίνεται κάτι τέτοιο. Αν λάβεις υπόψη ότι κάθε commit έχει μοναδικό hash βάσει αλγορίθμου, ουσιαστικά το rebase κάνει και rehashing. Άρα ουσιαστικά θα μπορείς να αλλάξεις το commit message αλλά φτιάχνεις ένα νέο commit για το commit.

Ναι το ξέρω, παρόλα αυτά είμαι σχεδόν σίγουρος ότι κάπου παλιά το είχα βρει με καποιο brute hack.

Επεξ/σία από Dr.Fuzzy
Δημοσ. (επεξεργασμένο)
% 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 αυτόματα, κτλ.

Επεξ/σία από imitheos
Δημοσ.
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 αυτό; Κάτι Μ θυμίζει. 

Δημοσ.
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 και το δοκιμάζω.

Δημοσ.
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.

  • Like 1
Δημοσ.

Δέν νομίζω να γίνεται αυτό που προσπαθείς να κάνεις για ευνόητους λόγους

Δημοσ.

Αν σε ενδιαφέρει μόνο για τις ημερομηνίες μπορείς να τις αλλάξεις όταν κάνεις amend.

To διαφορετικό hash δεν νομίζω ότι μπορείς να το αποφύγεις

Δημοσ. (επεξεργασμένο)
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 που δεν μας προσφέρει τίποτα για να μικρύνει λίγο το μήνυμά μου και άφησα μόνο τις ημερομηνίες που μας ενδιαφέρουν.

Επεξ/σία από imitheos
Δημοσ.

Λοιπόν, η λύση του ημίθεου δυστυχώς δε δούλεψε. Έκανα 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

 

Δημοσ.
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 ακριβώς γιατί θες να δοκιμάσεις πράγματα (μεγαλύτερη ευκολία).

Δημοσ. (επεξεργασμένο)
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

Επεξ/σία από Dr.Fuzzy

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...