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

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

Δημοσ.

Ας πουμε οτι εχουμε ενα project χ και θελω να δοκιμασω κατι (να αλλαξω πραματα ας πουμε). Οταν τα αλλαξω θα υπαρξουν δυο περιπτωσεις

α) να δουλευει

β) να μην δουλευει :P

 

Εαν πεσω στη περιπτωση β, πως θα κανω "rollback" στο αρχικο χ?

 

 

  • Απαντ. 37
  • Δημ.
  • Τελ. απάντηση

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

  • Moderators
Δημοσ.

Ναι γιατί άμα δουλεύεις με άλλους 10 και κάνεις rollback σε ένα δικό σου commit τότε όλα τα commits των άλλων μεταξύ του δικού σου και του τελευταίου commit θα χαθούν. Άμα δουλεύεις μόνος σου δε βλέπω γιατί να είναι επικίνδυνο.

Δημοσ.

Ας πουμε οτι εχουμε ενα project χ και θελω να δοκιμασω κατι (να αλλαξω πραματα ας πουμε). Οταν τα αλλαξω θα υπαρξουν δυο περιπτωσεις

α) να δουλευει

β) να μην δουλευει :P

 

Εαν πεσω στη περιπτωση β, πως θα κανω "rollback" στο αρχικο χ?

Το αν δεν δουλεύει θα αργήσει να φανεί ? Δηλαδή δεν μπορείς να κάνεις μεν τα commits τοπικά σε σένα αλλά να μην το κάνεις push στο github μέχρι να τελειώσει το test suite σου ?

 

Αν το github το θέλεις γιατί πρέπει να δει και κάποιος άλλος το αποτέλεσμα μπορείς να δουλέψεις σε ξεχωριστό branch και μετά να κάνεις push εκείνο το branch στο github. Έτσι θα έχεις δύο branch στο github με αυτά να είναι το master σου χωρίς τις επικίνδυνες αλλαγές και το branch σου με τις αλλαγές. Έτσι, αν δεν πετύχει το πείραμα απλά σβήνεις το δεύτερο branch τοπικά και remotely και τελείωσες.

 

Αν πρέπει οπωσδήποτε να κάνεις push στο github και πρέπει να δουλέψεις στο master, τότε θα πρέπει να κάνεις αυτό που σου πρότεινε ο Kercyn δηλαδή force push. Το "dangerous" έγκειται στο γεγονός ότι όταν κάνεις κάποιο push, μπορεί κάποιος contributor να κάνει εκείνη τη στιγμή branch το master και να αρχίσει να δουλεύει σε κάποιο feature. Αν εσύ μετά κάνεις force push (επειδή έσβησες commits με reset ή επειδή έκανες rebase ή ποιος ξέρει πως), τότε όταν πάει ο contributor να κάνει push (ή ακόμη και ένα απλό pull να κάνει), θα δημιουργηθεί πρόβλημα (το οποίο φυσικά λύνεται αλλά είναι δύσκολο για κάποιον που δεν έχει ασχοληθεί με το θέμα). Αν, όπως σου είπε και ο Kercyn, δεν υπάρχει κάποιος άλλος και είσαι ο μόνος που δουλεύεις στο repo, τότε δεν υπάρχει πρόβλημα. Θα χάσεις μεν τα commits αλλά θέλεις να τα χάσεις, δεν έγινε από λάθος.

 

Σημείωση: Να μην ξεχνάμε το reflog. Αν κάνεις reset --hard και "σβήσεις" τα commits, και κάνεις και push στο github, η ιστορία τους δεν χάνεται (τουλάχιστον για 30 μέρες μέχρι να τα σβήσει ο garbage collector) και μπορείς ανά πάσα στιγμή να τα επαναφέρεις.

  • Like 5
Δημοσ.

Αύτό που είπε ο imitheos για τα branches είναι μεγάλο πράγμα.

Όποτε θες να δοκιμάσεις κάποιο νέο feature, απλά κάν'το σε ένα

νέο branch. Αν δε δουλέψει το διαγράφεις και ούτε γάτα, ούτε ζη-

μιά. Μου λύνει τα χέρια κάθε φορά.

Δημοσ.

Μαλιστα.

btw, μονος μου δολευω, τα ανεβαζω στο github επειδη... ειναι τζαμπα :P

 

Δες και το bitbucket.org . Υποστηρίζει git και σου δίνει και private repos αν είναι μόνο λίγα άτομα(2 ή 3 δεν θυμαμαι), σε περίπτωση που δεν θες να εχεις τα πάντα public.

  • Like 1
Δημοσ.

Δες και το bitbucket.org . Υποστηρίζει git και σου δίνει και private repos αν είναι μόνο λίγα άτομα(2 ή 3 δεν θυμαμαι), σε περίπτωση που δεν θες να εχεις τα πάντα public.

5 άτομα παρακαλώ!

  • Like 1
Δημοσ.

Δες και το bitbucket.org . Υποστηρίζει git και σου δίνει και private repos αν είναι μόνο λίγα άτομα(2 ή 3 δεν θυμαμαι), σε περίπτωση που δεν θες να εχεις τα πάντα public.

Και εγώ προτιμώ το bitbucket. Δεν μπορώ να το δικαιολογήσω μια και το github υποστηρίζει 100 πράγματα παραπάνω αλλά για κάποιο λόγο προτιμώ το bb. Ανωμαλία :P

 

Μαλιστα.

btw, μονος μου δολευω, τα ανεβαζω στο github επειδη... ειναι τζαμπα :P

Τότε δεν έχεις πρόβλημα γιατί δεν θα βασίσει κανείς τη δουλειά του πάνω στα χαμένα commits. Κάνε το άφοβα. Αν δεν σε ενοχλεί όμως να τρέξεις δυο-τρία "git checkout" παραπάνω, τότε η λύση με το branch είναι η πιο δόκιμη.

Δημοσ.

Branch και άγιος ο θεός.

 

Εγώ έχω φτάσει στο σημείο να κάνω branch όχι για να γράψω κώδικα αλλά για να κάνω interactive rebase (του... κανονικού branch) και να δω με την ησυχία μου αν μου αρέσει το αποτέλεσμα.

  • Like 1
Δημοσ.

 

 

Το τελευταίο τέταρτο δεν μου παίζει τίποτα στο GH και παίρνω συνέχεια το παρακάτω.

post-84828-0-39729400-1426196914_thumb.jpeg

 

Καλά ρε παπί τι push έκανες ? :P

 

 

  • Like 3
Δημοσ.

Σημείωση: Να μην ξεχνάμε το reflog. Αν κάνεις reset --hard και "σβήσεις" τα commits, και κάνεις και push στο github, η ιστορία τους δεν χάνεται (τουλάχιστον για 30 μέρες μέχρι να τα σβήσει ο garbage collector) και μπορείς ανά πάσα στιγμή να τα επαναφέρεις.

 

Σε κάποιες περιπτώσεις μένουν και για 90 μέρες.

--expire=<time>

 

Entries older than this time are pruned. Without the option it is taken from configuration gc.reflogExpire, which in turn defaults to 90 days. --expire=all prunes entries regardless of their age; --expire=never turns off pruning of reachable entries (but see --expire-unreachable).

 

--expire-unreachable=<time>

 

Entries older than this time and not reachable from the current tip of the branch are pruned. Without the option it is taken from configuration gc.reflogExpireUnreachable, which in turn defaults to 30 days. --expire-unreachable=all prunes unreachable entries regardless of their age; --expire-unreachable=never turns off early pruning of unreachable entries (but see --expire).

 

Προσωπικά βάζω στο .gitrc να είναι πάντα 90 μέρες, αλλά αν κάποιος δουλεύει με τεράστια repositories, ίσως αυτό να του δημιουργεί προβλήματα.

Δημοσ.

Σε κάποιες περιπτώσεις μένουν και για 90 μέρες.

 

Προσωπικά βάζω στο .gitrc να είναι πάντα 90 μέρες, αλλά αν κάποιος δουλεύει με τεράστια repositories, ίσως αυτό να του δημιουργεί προβλήματα.

Εγώ θα θυμόμουν το unreachable τότε. Ακόμη καλύτερα με τις 90 ημέρες.

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

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

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

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

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

Σύνδεση

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

Συνδεθείτε τώρα

  • Δημιουργία νέου...