Έχω δύο υποκαταστήματα: master και dev
Θέλω να δημιουργήσω ένα "feature branch" από το dev branch.
Επί του παρόντος, στον κλάδο dev, κάνω:
$ git checkout -b myfeature dev
... (λίγη δουλειά)
$ git commit -am "blablabla"
$ git push origin myfeature
Αλλά, αφού απεικόνισα τα κλαδιά μου, πήρα:
--**master**
------0-----0-----0-----0-----0
------------------------**dev**----**myfeature**
Θέλω να πω ότι ο κλάδος φαίνεται να συγχωνεύεται, και δεν καταλαβαίνω γιατί...
Τι κάνω λάθος;
Μπορείτε να μου εξηγήσετε παρακαλώ πώς γίνεται η διακλάδωση από έναν άλλο κλάδο και το push back στο απομακρυσμένο αποθετήριο για τον κλάδο χαρακτηριστικών;
Όλα αυτά σε ένα μοντέλο διακλάδωσης όπως αυτό που περιγράφεται εδώ.
Αν σας αρέσει η μέθοδος στο σύνδεσμο που δημοσιεύσατε, ρίξτε μια ματιά στο Git Flow.
Είναι ένα σύνολο σεναρίων που δημιούργησε για αυτή τη ροή εργασίας.
Αλλά για να απαντήσω στην ερώτησή σας:
$ git checkout -b myFeature dev
Δημιουργεί τον κλάδο MyFeature του dev. Κάντε τη δουλειά σας και μετά
$ git commit -am "Your message"
Τώρα συγχωνεύστε τις αλλαγές σας στο dev χωρίς fast-forward
$ git checkout dev
$ git merge --no-ff myFeature
Τώρα προωθήστε τις αλλαγές στο διακομιστή
$ git push origin dev
$ git push origin myFeature
Και θα το δείτε όπως το θέλετε.
Αν θέλετε να δημιουργήσετε έναν νέο κλάδο από οποιονδήποτε από τους υπάρχοντες κλάδους στο Git, απλά ακολουθήστε τις επιλογές.
Πρώτα αλλάξτε/επισκεφθείτε τον κλάδο από τον οποίο θέλετε να δημιουργήσετε έναν νέο κλάδο. Για παράδειγμα, αν έχετε τα ακόλουθα κλαδιά όπως: 1:
Έτσι, αν θέλετε να δημιουργήσετε ένα νέο κλάδο με όνομα "subbranch_of_b1" κάτω από τον κλάδο με όνομα "branch1" ακολουθήστε τα βήματα:
Κάντε checkout ή αλλάξτε στο "branch1"
git checkout branch1
Τώρα δημιουργήστε τον νέο σας κλάδο με όνομα "subbranch_of_b1" κάτω από τον "branch1" χρησιμοποιώντας την ακόλουθη εντολή.
git checkout -b subbranch_of_b1 branch1
Το παραπάνω θα δημιουργήσει ένα νέο κλάδο με όνομα subbranch_of_b1 κάτω από τον κλάδο branch1 (σημειώστε ότι το branch1
στην παραπάνω εντολή δεν είναι υποχρεωτικό, αφού το HEAD δείχνει προς το παρόν σε αυτό, μπορείτε όμως να το προσδιορίσετε με ακρίβεια αν βρίσκεστε σε διαφορετικό κλάδο).
Τώρα αφού εργαστείτε με το υποκλάδο_του_b1 μπορείτε να το δεσμεύσετε και να το προωθήσετε ή να το συγχωνεύσετε τοπικά ή απομακρυσμένα.
σπρώξτε τον υποκλάδο_του_b1 στο απομακρυσμένο
git push origin subbranch_of_b1
Κάντε ταυτόχρονη εργασία στον κλάδο dev
. Αυτό που συμβαίνει είναι ότι στο σενάριό σας ο κλάδος των χαρακτηριστικών κινείται προς τα εμπρός από την άκρη του κλάδου dev, αλλά ο κλάδος dev δεν αλλάζει. Είναι ευκολότερο να το σχεδιάσετε ως ευθεία γραμμή, επειδή μπορεί να θεωρηθεί ως κίνηση προς τα εμπρός. Καταφέρατε να φτάσετε στο σημείο Α στο dev, και από εκεί απλά συνεχίσατε σε μια παράλληλη διαδρομή. Οι δύο κλάδοι δεν έχουν πραγματικά αποκλίνει.
Τώρα, αν κάνετε μια δέσμευση στην dev, πριν από τη συγχώνευση, θα ξεκινήσετε και πάλι από την ίδια δέσμευση, το Α, αλλά τώρα τα features θα πάνε στο C και η dev στο B. Αυτό θα δείξει τη διάσπαση που προσπαθείτε να απεικονίσετε, καθώς οι κλάδοι έχουν πλέον αποκλίνει.
*-----*Dev-------*Feature
Versus
/----*DevB
*-----*DevA
\----*FeatureC