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

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

Δημοσ.

@imitheos

delk@Newton:~/Desktop/triac$ git log --reverse origin/master..master
commit ddcb0f6ba0187dfb9ab482b31e9a010140017139
Author: Hidden
Date:   Mon Mar 18 17:09:36 2019 +0200

    Improve code

    - Store edge matrix to off-chip SDRAM
    - Remove redundant code chunks
    - Perform several code optimizations
    - Clean up Triangle class
    - Declare static all necessary variables
delk@Newton:~/Desktop/triac$ git log --reverse master..origin/master
commit 04d1ed886f8b00de37bd24ee814e708f4b0c4efe
Author: Hidden
Date:   Tue Nov 20 15:43:04 2018 +0200

    Fix .gitignore mistake

    - Fix .gitignore mistake preventing .petalinux/ folder tracking
    - Add missing .petalinux/ folder required for PetaLinux flow

 

@pmav99

νομίζω δεν εχω local changes

delk@Newton:~/Desktop/triac$ git status
On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commit each, respectively.
  (use "git pull" to merge the remote branch into yours)
nothing to commit, working directory clean

Οπότε αν κατάλαβα σωστά θέλω:

git checkout master
git rebase origin/master
git push -f -u --tags origin master

 

 

 

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

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

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

Στο spoiler δείχνει το tip του origin/master να είναι στο commit 04d1ed8 το οποίο να υποθέσω ότι έγινε μέσα από το gui του bitbucket για αυτό και υπάρχει μόνο στο remote;

Θα μπορούσε απλά να έχει γίνει και από άλλο υπολογιστή.

@Dr.Fuzzy όχι δεν έχεις. Άρα τα stash δεν χρειάζονται. Δοκίμασε να κάνεις το rebase. Αν δεν μπορεί να το κάνει, θα σου βγάλει μήνυμα και με git rebase --abort το ακυρώνεις και επανέρχεσαι στην κατάσταση που έχεις τώρα.

 

6 minutes ago, Dr.Fuzzy said:

Οπότε αν κατάλαβα σωστά θέλω:


git checkout master
git rebase origin/master
git push -f -u --tags origin master

Τα tags είναι επί της ουσίας aliases για commit hashes. «Δείχνουν» σε ένα συγκεκριμένο commit. Το tag v1.6.0 δείχνει στο ddcb0f6. Μετά το rebase θα εξακολουθήσει να δείχνει στο ddcb0f6. Ενώ εσύ θες να το κάνεις να δείχνει στο νέο commit που θα δημιουργηθεί μετά το rebase. Άρα τα συγκεκριμένο tag θα χρειαστεί να τα ξαναφτιάξεις (με --force)

Επεξ/σία από pmav99
Δημοσ.
1 minute ago, pmav99 said:

Θα μπορούσε απλά να έχει γίνει και από άλλο υπολογιστή.

Οχι δεν έχει γίνει τίποτα commit μέσα από το gui του bitbucket, από άλλο υπολογιστή λογικά, καθώς δουλεύω σε 2-3.

Αναφορικά με το 1.5.1 συμφωνώ είναι υπερβολή, ίσως να έπρεπε να ενσωματωθεί στην 1.6.0 και να τελειώνει η υπόθεση, αλλά φοβάμαι μη κάνω καμία πατάτα.

Παρεπιπτόντως αυτό το link έχω ακολουθήσει για τα commit messages!

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

Άντε κάνε το rebase! Πονάει λιγότερο από όσο νομίζεις! :P :D

BTW, αν το repo ΔΕΝ είναι public και ΔΕΝ το χρησιμοποιούν και άλλοι εκτός από εσένα, τότε μπορείς άφοβα να αλλάξεις το history ;)

Επεξ/σία από pmav99
Δημοσ.
6 minutes ago, pmav99 said:

Άντε κάνε το rebase! Πονάει λιγότερο από όσο νομίζεις! :P :D

BTW, αν το repo ΔΕΝ είναι public και ΔΕΝ το χρησιμοποιούν και άλλοι εκτός από εσένα, τότε μπορείς άφοβα να αλλάξεις το history ;)

Οχι δεν είναι public ακόμα (αλλά θα το κάνω σύντομα) οπότε δεν έχω πρόβλημα να κάνω hack το history (σε λογικά πλαίσια!).

ΟΚ κάνω rebase και ενημερώνω σε λίγο.

@pmav99

Spoiler

delk@Newton:~/Desktop/triac$ git checkout master
Already on 'master'
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commit each, respectively.
  (use "git pull" to merge the remote branch into yours)
delk@Newton:~/Desktop/triac$ git rebase origin/master
First, rewinding head to replay your work on top of it...
Applying: Improve code
Using index info to reconstruct a base tree...
M    .gitignore
.git/rebase-apply/patch:69909: space before tab in indent.
      dmatest_0: dmatest@0 { // for xilinx axi dma Kernel driver test (axidmatest.ko)
.git/rebase-apply/patch:69910: space before tab in indent.
        compatible ="xlnx,axi-dma-test-1.00.a";
.git/rebase-apply/patch:69911: space before tab in indent.
        dmas = <&axi_dma_0 0
.git/rebase-apply/patch:69912: space before tab in indent.
                  &axi_dma_0 1>;
.git/rebase-apply/patch:69913: space before tab in indent.
        dma-names = "axidma0", "axidma1";
warning: squelched 15 whitespace errors
warning: 20 lines add whitespace errors.
Falling back to patching base and 3-way merge...

 

Κάνω push;

Δημοσ.

Αφου έχεις conflicts υπάρχουν δύο δρόμοι:

1. Αν δεν σε νοιάζει να παραμείνει το 1.5.1 στο origin τότε κάνεις

  • git rebase --abort (για να βγεις από το rebase mode)
  • git checkout master (για να πας στο local master)
  • git push --force --all (για να κάνεις overwrite το origin/master με το local master.
  • git push --tags (για να στείλεις το 1.6.0 στο origin)

Αυτό σημαίνει ότι θα χάσεις το 1.5.1 από το origin και ότι τις αλλαγές του αν δεν τις έχεις θα πρέπει να τις υλοποιήσεις πάνω στο 1.6.0

2. Aν σε νοιάζει να παραμείνει το 1.5.1 στο origin τότε θα πρέπει να επιλύσεις τα conflicts. Δίνεις λοιπόν git mergetool και αν είσαι τυχερός το conflict θα επιλυθεί μόνο του. Αν είναι πιο περίπλοκα θα πρέπει να το κάνεις resolve manually (3 way merge). Μη σε φοβίζει είναι πιο απλό από όσο δείχνει. Δες κανένα βίντεο στο youtube για το πως ακριβώς γίνεται γιατί εξαρτάται από το diff tool που χρησιμοποιείς (kdiff3, vimdiff κτλ)

Δημοσ.
5 minutes ago, pmav99 said:

Αφου έχεις conflicts υπάρχουν δύο δρόμοι:

1. Αν δεν σε νοιάζει να παραμείνει το 1.5.1 στο origin τότε κάνεις

  • git rebase --abort (για να βγεις από το rebase mode)
  • git checkout master (για να πας στο local master)
  • git push --force --all (για να κάνεις overwrite το origin/master με το local master.
  • git push --tags (για να στείλεις το 1.6.0 στο origin)

Αυτό σημαίνει ότι θα χάσεις το 1.5.1 από το origin και ότι τις αλλαγές του αν δεν τις έχεις θα πρέπει να τις υλοποιήσεις πάνω στο 1.6.0

2. Aν σε νοιάζει να παραμείνει το 1.5.1 στο origin τότε θα πρέπει να επιλύσεις τα conflicts. Δίνεις λοιπόν git mergetool και αν είσαι τυχερός το conflict θα επιλυθεί μόνο του. Αν είναι πιο περίπλοκα θα πρέπει να το κάνεις resolve manually (3 way merge). Μη σε φοβίζει είναι πιο απλό από όσο δείχνει. Δες κανένα βίντεο στο youtube για το πως ακριβώς γίνεται γιατί εξαρτάται από το diff tool που χρησιμοποιείς (kdiff3, vimdiff κτλ)

OK, χαζή ερώτηση, αν σβήσω το local και κάνω git clone απο την αρχή απο το remote δεν θα έχω 1.5.0->1.5.1->1.6.0;

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

όχι. Το origin δεν ξέρει αυτή τη στιγμή τίποτα για το 1.6.0. Οπότε το νέο clone σου δεν θα έχει το 1.6.0.

 

edit

εσύ τώρα έχεις:

   common
   parent
     |
     v

--- 1.5.0 ----- 1.5.1 (origin/master)
     |
     |--------- 1.6.0 (master)

Αν κάνεις rebase και λύσεις τα conflicts που σου βγάζει θα πας εδώ:

   common
   parent
     |
     v

--- 1.5.0 ----- 1.5.1 ----- 1.6.0 (master, origin/master)

Αν ρίξεις git push --force θα έχεις αυτό:

   common
   parent
     |
     v

--- 1.5.0 ----- 1.6.0 (master, origin/master)

 

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

όχι. Το origin δεν ξέρει αυτή τη στιγμή τίποτα για το 1.6.0. Οπότε το νέο clone σου δεν θα έχει το 1.6.0.

OK what if I git clone the project, οπότε τότε θα έχω 1.5.0->1.5.1 και θα έχω χάσει την 1.6.0. Σωστά;

Οπότε μετά μπορώ στο freshly cloned repo να κάνω overwrite τα αρχεία του με τα αρχεία του local repo (εκτός απο το .git φυσικά) και στη συνέχεια να κάνω git add, commit και push 1.6.0.

Είναι history hack το ξέρω και θα είναι φυσικά σαν να υλοποιώ τις αλλαγές της 1.6.0 σήμερα αλλά δε με ενδιαφέρει καθόλου καθότι προς το παρόν είναι private repo και δεν το έχει κάποιος άλλος. Αν το παρατραβήξω κιόλας αφού στο cloned η 1.5.1 θα είναι η HEAD θα μπορούσα να την κάνω uncommit την 1.5.1 (git reset --soft HEAD~) να κανω overwrite με τα αρχεία του local και στη συνέχεια να κάνω git add, commit και push 1.6.0 οπότε ξεφορτώνομαι την 1.5.1 και την ενσωματώνω στην 1.6.0.

 

BTW γιατι έχω και HEAD - > master και 1.6.0 διαφορετικά commits;

delk@Newton:~/Desktop/triac$ git log --all --decorate
commit 5164f3d09b6b1cc6a5bdea2e47e04d5236d2266a (HEAD -> master)
Author: Hidden
Date:   Mon Mar 18 17:09:36 2019 +0200

    Improve code
    
    - Store edge matrix to off-chip SDRAM
    - Remove redundant code chunks
    - Perform several code optimizations
    - Clean up Triangle class
    - Declare static all necessary variables

commit ddcb0f6ba0187dfb9ab482b31e9a010140017139 (tag: v1.6.0)
Author: Hidden
Date:   Mon Mar 18 17:09:36 2019 +0200

    Improve code
    
    - Store edge matrix to off-chip SDRAM
    - Remove redundant code chunks
    - Perform several code optimizations
    - Clean up Triangle class
    - Declare static all necessary variables

 

Επεξ/σία από Dr.Fuzzy
Δημοσ. (επεξεργασμένο)
9 minutes ago, Dr.Fuzzy said:

 

BTW γιατι έχω και HEAD - > master και 1.6.0 διαφορετικά commits;

Προφανώς έχεις κάνεις  rebase. Το tag v1.6.0 εξακολουθεί να δείχνει στο παλιο commit (δηλαδή στο ddcb0f6b) ενώ μετά το rebase δημιουργήθηκε ένα καινούριο commit.

ΒΤW αν είναι εύκολο να βάζεις το output των εντολών που σου έδωσα στην προηγούμενη σελίδα, γιατί:

  1. Σε αυτό που συζητάμε δεν μας ενδιαφέρουν τα πλήρη commit messages
  2. Δεν φαίνεται πιο είναι το parent του καθενός commit

από εκέι και πέρα αυτό που λες είναι σωστό και είναι ΟΚ αν θες να τελειώνεις. Παρόλα αυτά είναι μια καλή ευκαιρία να αποκτήσεις λίγη hands-on experience με git :)

Επεξ/σία από pmav99
Δημοσ.
12 minutes ago, pmav99 said:

Προφανώς έχεις κάνεις  rebase. Το tag v1.6.0 εξακολουθεί να δείχνει στο παλιο commit (δηλαδή στο ddcb0f6b) ενώ μετά το rebase δημιουργήθηκε ένα καινούριο commit.

ΒΤW αν είναι εύκολο να βάζεις το output των εντολών που σου έδωσα στην προηγούμενη σελίδα, γιατί:

  1. Σε αυτό που συζητάμε δεν μας ενδιαφέρουν τα πλήρη commit messages
  2. Δεν φαίνεται πιο είναι το parent του καθενός commit

από εκέι και πέρα αυτό που λες είναι σωστό και είναι ΟΚ αν θες να τελειώνεις. Παρόλα αυτά είναι μια καλή ευκαιρία να αποκτήσεις λίγη hands-on experience με git :)

OK, βάσει και του rebase που έχει γίνει, αν δεν κάνω τον (hack) τρόπο που λέω, μπορείς να μου πάλι τον legit τρόπο γιατί έχω χαθεί με όλα τα post και ποιο τελικά θα είναι μετά το commit log μου;

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

Δώσε μια git lg1 και κάνε paste από το 1.4.0 και μετά

για δες:

Spoiler

* 5164f3d - (24 hours ago) Improve code - Hidden (HEAD -> master)
* 04d1ed8 - (4 months ago) Fix .gitignore mistake - Hidden (tag: v1.5.1, origin/master)
| * ddcb0f6 - (24 hours ago) Improve code - Hidden (tag: v1.6.0)
|/  
* 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)

επίσης στον hack τροπο που ανέφερα κάνω push στο existing remote repo ή προτιμότερα delete to remote repo, create από την αρχή και μετά push;

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

Τέλεια, το rebase έγινε σωστά άρα έχεις τελειώσει. Δίνεις:

  • git checkout master (για να πας locally στο 5164f3d)
  • git tag -d v1.6.0 (για να διαγράψεις το 1.6.0. Προσοχή αυτό διαγράφει το tag όχι το commit. Διαγράφει δηλαδή το alias. Το commit παραμένει στο reflog)
  • git tag ... (για να ξαναδημιουργήσεις το 1.6.0)
  • git push
  • git push --tags

Μετά από αυτό στο git lg1 δεν θα βλέπεις πια το ddcb0f6 αλλά κάτι τέτοιο:

* 5164f3d - (24 hours ago) Improve code - Hidden (tag: v1.6.0, HEAD -> master, 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) 

 

Επεξ/σία από pmav99
  • Thanks 1
Δημοσ.
53 λεπτά πριν, Dr.Fuzzy είπε

OK what if I git clone the project, οπότε τότε θα έχω 1.5.0->1.5.1 και θα έχω χάσει την 1.6.0. Σωστά;

Οπότε μετά μπορώ στο freshly cloned repo να κάνω overwrite τα αρχεία του με τα αρχεία του local repo (εκτός απο το .git φυσικά) και στη συνέχεια να κάνω git add, commit και push 1.6.0.

Είναι history hack το ξέρω

Τώρα που λύθηκε το πρόβλημα, να σχολιάσω ότι το παραπάνω είναι semi-official τακτική :) documented και στο παρακάτω xkcd :)

git.png

 

  • Thanks 1

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

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

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

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

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

Σύνδεση

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

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

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