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

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

Δημοσ. (επεξεργασμένο)
1 hour ago, pmav99 said:

git checkout master (για να πας locally στο 5164f3d)

μα είμαι on 'master'

Spoiler

delk@Newton:~/Desktop/triac$ git checkout master
Already on 'master'
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

το log μου αυτή τη στιγμή (δεν έχω κάνει push ακόμα) έχει ως εξής (το origin/master όμως δείχνει ακόμα στην 1.5.1 και όχι στην 1.6.0!):

Spoiler

* 5164f3d - (25 hours ago) Improve code - Hidden (HEAD -> master, tag: v1.6.0)
* 04d1ed8 - (4 months ago) Fix .gitignore mistake - Hidden (tag: v1.5.1, origin/master)
* 95a4ed9 - (5 months ago) Add Vivado, Xilinx SDK and PetaLinux projects - Hidden (tag: v1.5.0)
* 29d183c - (5 months ago) Choose target FPGA board when build script is run - Hidden (tag: v1.4.2)

 

Anyway, σε αυτή τη φάση, μήπως είναι καλή ιδέα να ξεφορτωθώ την 1.5.1 σαν ξεχωριστό commit και να γίνει merge στην 1.6.0 ή μπλέκονται πολύ τα πράγματα; 

@imitheosΆρα δεν είμαι ο πρώτος που σκέφτηκε τέτοιες "πατέντες", πάλι καλά!

 

Επεξ/σία από Dr.Fuzzy
  • Απαντ. 54
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοσ.
1 hour ago, Dr.Fuzzy said:

μα είμαι on 'master'

Το που ακριβώς είσαι δεν μπορώ να το ξέρω. Μπορεί εν τω μεταξύ να έχεις πάει σε άλλο branch.. Βάζοντας σου ένα explicit step για να επανέλθεις στο master εξασφαλίζω ότι οι ακόλουθες εντολές θα κάνουν αυτό που πρέπει.

1 hour ago, Dr.Fuzzy said:

το log μου αυτή τη στιγμή (δεν έχω κάνει push ακόμα) έχει ως εξής (το origin/master όμως δείχνει ακόμα στην 1.5.1 και όχι στην 1.6.0!):

Πολύ λογικό. Αφού δεν έχεις κάνει push γιατί να αλλάξει το origin/master? Μόλις κάνεις push και push --tags τότε θα δείξει την 1.6.0 στο origin. Για να το δεις καλύτερα τρέξε διαδοχικά:

  • git lg1(υφιστάμενη κατάσταση)
  • git push (this will push 5164f3d to origin)
  • git lg1 (το tag/alias 1.6.0 θα είναι μόνο local και όχι στο origin)
  • git push --tags
  • git lg1 (το tag/alias 1.6.0 θα είναι και local και στο origin)
1 hour ago, Dr.Fuzzy said:

Anyway, σε αυτή τη φάση, μήπως είναι καλή ιδέα να ξεφορτωθώ την 1.5.1 σαν ξεχωριστό commit και να γίνει merge στην 1.6.0 ή μπλέκονται πολύ τα πράγματα;  

Εγώ λέω να κάνεις απλά push και να (ξανα-)αρχίσεις να κάνεις development. Αλλά από εκεί και πέρα, περί ορέξεως!

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

@pmav99 never ending nightmare, τι σκ@τ@ κάνει το ddcb0f6 στο remote; See for yourself!

Spoiler

* 5164f3d - (31 hours ago) Improve code - Hidden (HEAD -> master, tag: v1.6.0, origin/master)
* 04d1ed8 - (4 months ago) Fix .gitignore mistake - Hidden (tag: v1.5.1)
* 95a4ed9 - (5 months ago) Add Vivado, Xilinx SDK and PetaLinux projects - Hidden (tag: v1.5.0)
* 29d183c - (5 months ago) Choose target FPGA board when build script is run - Hidden (tag: v1.4.2)
* 633b50a - (5 months ago) Make code implementation changes - Hidden (tag: v1.4.1)
* c9cbf42 - (5 months ago) Change output triangulation matrix format - Hidden (tag: v1.4.0)
* c86ba15 - (5 months ago) Perform code implementation changes - Hidden (tag: v1.3.1)
* 9ee9b51 - (6 months ago) Improve code - Hidden (tag: v1.3.0)
* 460d462 - (6 months ago) Adjust code to increase the number of points - Hidden (tag: v1.2.0)
* b6450b6 - (6 months ago) Correct surface view - Hidden (tag: v1.1.1)
* 8e46435 - (6 months ago) Improve code - Hidden (tag: v1.1.0)
* 08a0200 - (6 months ago) Initialized repository - Hidden (tag: v1.0.0)

image.png.c4842c955e53711be42ab91ab90c94d6.png

By the way οταν εκανα push --tags πήρα error.

Spoiler

 

delk@Newton:~/Desktop/triac$ git push --tags

! [rejected]        v1.6.0 -> v1.6.0 (already exists)

error: failed to push some refs to 'https://[email protected]/DrFuzzy/triac.git'

hint: Updates were rejected because the tag already exists in the remote.

 

 

Επεξ/σία από Dr.Fuzzy
Δημοσ. (επεξεργασμένο)

1. το git push --all ΔΕΝ σπρώχνει τα tags. Τα tags πρέπει να τα κάνεις push ξεχωριστα με git push --tags.

2. Όταν υπάρχει ένα tag/alias για να αλλάξουμε το commit στο οποίο δείχνει πρέπει να το ξαναδημιουργήσουμε με git tag --force -a v1.6.0 -m "bump version: 1.5.1 to 1.6.0".

3. Για να βρίσκεται το ddcb0f6 μαζί με το tag/alias v1.6.0  στο origin σημαίνει ότι έδωσες git push --tags προτού ξαναδημιουργήσεις το tag locally. Αν κοιτάξεις το bash history είμαι σίγουρος ότι θα το δεις.

 

4. Το git σου επιτρέπει να κανεις overwrite το origin αλλα απαιτεί --force. Άρα το μήνυμα λάθους που παίρνεις όταν δίνεις git push --tags είναι νομίζω προφανές. Δωσε λοιπόν git push --tags --force και τα local tag/alias θα κάνουν overwrite αυτα του origin.

Επεξ/σία από pmav99
  • Thanks 1
Δημοσ. (επεξεργασμένο)
5 hours ago, pmav99 said:

1. το git push --all ΔΕΝ σπρώχνει τα tags. Τα tags πρέπει να τα κάνεις push ξεχωριστα με git push --tags.

2. Όταν υπάρχει ένα tag/alias για να αλλάξουμε το commit στο οποίο δείχνει πρέπει να το ξαναδημιουργήσουμε με git tag --force -a v1.6.0 -m "bump version: 1.5.1 to 1.6.0".

3. Για να βρίσκεται το ddcb0f6 μαζί με το tag/alias v1.6.0  στο origin σημαίνει ότι έδωσες git push --tags προτού ξαναδημιουργήσεις το tag locally. Αν κοιτάξεις το bash history είμαι σίγουρος ότι θα το δεις.

4. Το git σου επιτρέπει να κανεις overwrite το origin αλλα απαιτεί --force. Άρα το μήνυμα λάθους που παίρνεις όταν δίνεις git push --tags είναι νομίζω προφανές. Δωσε λοιπόν git push --tags --force και τα local tag/alias θα κάνουν overwrite αυτα του origin.

Ναι επιτέλους, έκανα git push --tags --force και έγινε 1.6.0/5164f3d και το ddcb0f6 commit έφυγε!

Πάντως αναφορικά με το 3. όχι έφτιαξα το local tag πριν κάνω push (history confirms it) γι'αυτό και μου έκανε εντύπωση το error. Ίσως κάτι άλλο να έφταιγε.

@pmav99 ευχαριστώ για τη βοήθεια και την υπομονή σου φίλε μου!

PS. Μια μάλλον OCD ερώτηση, υπάρχει εύκολος τρόπος να αλλάξει ένα commit message (για την ακρίβεια το πρώτο το οποίο από κεκτημένη ταχύτητα έγραψα "Initialized repository " αντί "Initialize Repository") αναίμακτα και χωρίς να γίνει extra commit και να αλλάξουν τα timestamps;

 

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

Ναι γίνεται αλλα δεν ξέρω τι θα γίνει με τα tags. Πιθανά ναθέλει να τα ξαναφτιάξεις ολα.

Ο τρόπος ειναι να δώσεις git rebase --root --interactive το οποίο θα σου επιτρέψει να πειράξεις το history. Αν δεν ξέρεις πως δουλεύει το interactive rebase, Google it. Εν ολίγοις θελεις να κανεις reword το αρχικό commit.

Αλλα επειδή είναι rebase θα δημιουργηθούν νεα commits, ενω τα tags θα εξακολουθήσουν να δείχνουν στα παλιά. Ισως υπάρχει τρόπος να ανανεωθούν τα tags αυτόματα αλλά δεν το έχω κοιτάξει ποτε.

Δημοσ.

Με το interactive rebase όμως δεν θα αλλάξουν τα commit timestamps; (Το author timestamp θα μείνει ίδιο αλλά το commit θα αλλάξει και θα είναι σημερινό)

  • Like 1
Δημοσ. (επεξεργασμένο)
6 minutes ago, pmav99 said:

Ναι γίνεται αλλα δεν ξέρω τι θα γίνει με τα tags. Πιθανά ναθέλει να τα ξαναφτιάξεις ολα.

Ο τρόπος ειναι να δώσεις git rebase --root --interactive το οποίο θα σου επιτρέψει να πειράξεις το history. Αν δεν ξέρεις πως δουλεύει το interactive rebase, Google it. Εν ολίγοις θελεις να κανεις reword το αρχικό commit.

Αλλα επειδή είναι rebase θα δημιουργηθούν νεα commits, ενω τα tags θα εξακολουθήσουν να δείχνουν στα παλιά. Ισως υπάρχει τρόπος να ανανεωθούν τα tags αυτόματα αλλά δεν το έχω κοιτάξει ποτε.

Με git rebase το έχω δοκιμάσει παλιά, γίνεται αλλά δημιουργούνται νεα commit με νεα timestamps νομίζω.

Δεν είναι σημαντικό, οπότε αν βρω χρόνο και το κοιτάξω σε κάποια φάση θα το κάνω post εδώ.

@imitheosμαζί γράφαμε!

Επεξ/σία από Dr.Fuzzy
Δημοσ.
13 λεπτά πριν, Dr.Fuzzy είπε

Με git rebase το έχω δοκιμάσει παλιά, γίνεται αλλά δημιουργούνται νεα commit με νεα timestamps νομίζω.

Δεν είναι σημαντικό, οπότε αν βρω χρόνο και το κοιτάξω σε κάποια φάση θα το κάνω post εδώ.

@imitheosμαζί γράφαμε!

Το git-am (το οποίο χρησιμοποιεί η rebase) έχει την παράμετρο --commiter-date-is-author-date την οποία υποστηρίζει η git-rebase. Για κάποιο λόγο όμως έχουν επιλέξει να μην ενεργοποιείται όταν τρέχεις interactive rebase.

Υπάρχει τρόπος να μην αλλάξουν τα timestamps αλλά είναι χειροκίνητος και δεν νομίζω ότι αξίζει για ένα typo. Επίσης αν εκεί που λες "δημιουργούνται νέα commit" εννοείς ότι αλλάζει το commit id, αυτό εννοείται πως δεν μπορείς να το γλυτώσεις. Εφόσον θα αλλάξεις το μήνυμα του πρώτου commit θα αλλάξει id εκείνο το commit οπότε θα αλλάξουν και όλα τα μεταγενέστερα.

Αν παρόλα αυτά θέλεις να το δοκιμάσεις, τα βήματα είναι στο περίπου τα παρακάτω:

1) Τρέχεις git-log  και βλέπεις το id και την ημερομηνία του πρώτου commit. Έστω ότι αυτά είναι 08a0200 και "Thu 01 October 03:43:12 2018 +0300"

2)

% git format-patch 08a0200

Αυτή η εντολή θα σου δημιουργήσει αρχεία patches με όλα τα commits από το 08a0200 και έπειτα (χωρίς αυτό).

3)

% git reset --hard 08a0200

Αυτή η εντολή θα σου αλλάξει το tree και το index σαν να είχες γράψει το πρώτο commit και τίποτα άλλο. Προσοχή: Τα untracked αρχεία (όπως πχ τα patches που δημιούργησες πριν) δεν πειράζονται αλλά όσες uncommitted αλλαγές έχεις, θα χαθούν.

4)

% export GIT_COMMITTER_DATE="Thu 01 October 03:43:12 2018 +0300"
% export GIT_AUTHOR_DATE="Thu 01 October 03:43:12 2018 +0300"
% git commit --ammend
% unset GIT_COMMITTER_DATE GIT_AUTHOR_DATE

Τρέχοντας την git-commit με την παράμετρο --ammend μπορείς να πειράξεις το τρέχον commit (δηλαδή το πρώτο μια και τα υπόλοιπα χάθηκαν λόγω του git-reset) και να διορθώσεις το typo. Αυτό όμως θα έχει ως συνέπεια να αλλάξει η commit date στην σημερινή όπως γίνεται και στο rebase. Για αυτό το λόγο ορίζουμε στο περιβάλλον τις δύο παραπάνω μεταβλητές και τις δίνουμε τιμή την σωστή ημερομηνία ώστε το commit να διατηρήσει τις σωστές ημερομηνίες (αν κάνεις ammend χωρίς καμμία αλλαγή τότε το commit διατηρεί το ίδιο id αλλά επειδή θα διορθώσουμε το typo, θα αλλάξει id).

Έπειτα αφαιρούμε τις μεταβλητές γιατί αλλιώς όλα τα επόμενα commits θα έχουν την ίδια ημερομηνία.

5)

% git am --committer-date-is-author-date 0*.patch

Το git-am θα κάνει apply όλα τα patches και θα δημιουργήσει τα commits όπως τα είχες πριν με τις ίδιες ημερομηνίες (όχι όμως ίδιο commit id).

6) Επαναδημιουργία των tags μία-μία ώστε να δείχνουν στα νέα commits.

7) Force push στο remote.

Όπως βλέπεις, πέρα από το history-destroying φιλοσοφικό θέμα, είναι πολύ μανούρα απλά για να διορθώσεις ένα typo.

Δημοσ.

@imitheosαπίστευτη μανούρα όντως, βέβαια αν το OCD μου χτυπήσει κόκκινα...δεν υπόσχομαι ότι δε θα το δοκιμάσω.

Επίσης μπορεί να γίνει με git rebase --interactive --root και mark το root commit ως reword. Προφανώς θα δημιουργηθούν νεα commit ids και τα tags θα πρέπει να φτιαχτούν από την αρχή (όπως είπε και pmav99).

Δημοσ.
23 λεπτά πριν, Dr.Fuzzy είπε

@imitheosαπίστευτη μανούρα όντως, βέβαια αν το OCD μου χτυπήσει κόκκινα...δεν υπόσχομαι ότι δε θα το δοκιμάσω.

Επίσης μπορεί να γίνει με git rebase --interactive --root και mark το root commit ως reword. Προφανώς θα δημιουργηθούν νεα commit ids και τα tags θα πρέπει να φτιαχτούν από την αρχή (όπως είπε και pmav99).

Αυτή η μέθοδος είναι η πιο εύκολη (και η πιο δόκιμη. για αυτό το σκοπό φτιάχθηκε άλλωστε). Το χειροκίνητο τρόπο τον έγραψα μόνο και μόνο επειδή είπες δεν θέλεις να αλλάξουν τα timestamps. Αν δεν σε νοιάζει, τότε εννοείται ότι τρέχεις interactive rebase ή ακόμη καλύτερα δεν τρέχεις τίποτα και το αφήνεις έτσι 😛

  • Like 1
Δημοσ.

ομολογώ πως μπήκα να βοηθήσω κι εγώ αλλά μου κάψατε τον εγκέφαλο με ό,τι διάβασα :P

 

με απλά λόγια αν δε σε αφήνει να κάνεις push (γιατί το πιο πιθανό το remote έχει προχωρήσει) όπως είπαν και οι προηγούμενοι κάνεις ένα rebase για να ρθει και το local στα ίσα του.

 

git fetch origin

git rebase origin/master

git push

 

ή πιο σύντομα:

git pull --rebase

git push

 

το force push καλό είναι αν δεν είσαι 100% σίγουρος πως το χρειάζεσαι να το αποφεύγεις

ωστόσο θα βάλω ένα relevant comic επι τ' ευκερίας :P

spacer.png

Δημοσ.
30 λεπτά πριν, pmav99 είπε

Εδώ προτείνει και το git rebase --committer-date-is-author-date

https://stackoverflow.com/questions/2973996/git-rebase-without-changing-commit-timestamps

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

Δημοσ. (επεξεργασμένο)
2 hours ago, imitheos said:

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

Τότε ίσως μπορεί να κάνει ένα interactive rebase και μετά να εφαρμόσει αυτό: https://stackoverflow.com/a/11179245/592289

Φυσικά όπως και αν έχει, δεν αξίζει σε καμία περίπτωση τον κόπο

Επεξ/σία από pmav99

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

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

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

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

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

Σύνδεση

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

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