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

Git push changes to remote branch


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

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

Μικρή βοήθεια πριν κάνω μεγάλη πατάτα!

Στο local repo έκανα κάποιες αλλαγές που ήθελα να τις κάνω push σε ξεχωριστό branch (develop) από το master.

git checkout origin/develop
git add .
git commit -m "Modify code to use N-ary tree"
git push origin origin/develop

και όπως το βλέπω τώρα μάλλον στο push έκανα τη μλκ. Tα branches που έχω locally/remotely:

Spoiler

* (HEAD detached from origin/develop)
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/master

και το log μου:

Spoiler

commit 51348744c5222663aeb415c83c51706b5d4c78a6 (HEAD)
Author: DrFuzzy
Date:   Tue Apr 6 17:53:32 2021 +0300

    Modify code to use N-ary tree

commit b56f40480ff7135dc58ebcfe6378b80ffd4baa6d (tag: v1.6.1, origin/master, origin/develop, origin/HEAD)
Author: DrFuzzy
Date:   Sun Dec 15 16:15:46 2019 +0000

    Replace absolute symlinks with original files
    
commit 5164f3d09b6b1cc6a5bdea2e47e04d5236d2266a (tag: v1.6.0, master)
Author: DrFuzzy
Date:   Mon Mar 18 17:09:36 2019 +0200

    Store edge matrix to off-chip SDRAM

To commit που ήθελα να πάει στην develop είναι το commit 51348744c5222663aeb415c83c51706b5d4c78a6 (HEAD) και είναι locally μόνο βάσει του log.

Φαντάζομαι ότι πρέπει να κάνω git push origin/develop HEAD για να συγχρονιστεί το local με το remote αλλά δεν είμαι σίγουρος.

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

Για να βγάλουμε άκρη, άνοιξε το `~/.gitconfig` και προσέθεσε μέσα τα εξής:
 

[alias]
  lg1 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all
  lg2 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n''          %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all

σώσε το και μετά τρέξε την εντολή `git lg1` η οποία θα σου δείξει τα logs με αρκετά πιο ευανάγνωστο format (1 line per commit) και θα σου δείξει που είναι τι. Το `git lg2` είναι το ίδιο απλά χρησιμοποιεί 2 γραμμές ανά commit.

Αν δεν βγάζεις άκρη, βγάλε ένα screenshot και ανέβασε το.

  • Thanks 1
Δημοσ.
32 minutes ago, pmav99 said:

Για να βγάλουμε άκρη, άνοιξε το `~/.gitconfig` και προσέθεσε μέσα τα εξής:
 


[alias]
  lg1 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all
  lg2 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n''          %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all

σώσε το και μετά τρέξε την εντολή `git lg1` η οποία θα σου δείξει τα logs με αρκετά πιο ευανάγνωστο format (1 line per commit) και θα σου δείξει που είναι τι. Το `git lg2` είναι το ίδιο απλά χρησιμοποιεί 2 γραμμές ανά commit.

Αν δεν βγάζεις άκρη, βγάλε ένα screenshot και ανέβασε το.

Πάρε τα τελευταία 4 (είναι πολλά):

Spoiler

$ git lg1
* 5134874 - (2 hours ago) Modify code to use N-ary tree - DrFuzzy (HEAD)
* b56f404 - (1 year, 4 months ago) Replace absolute symlinks with original files - DrFuzzy (tag: v1.6.1, origin/master, origin/develop, origin/HEAD)
* 5164f3d - (2 years, 1 month ago) Improve code - DrFuzzy (tag: v1.6.0, master)
* 04d1ed8 - (2 years, 5 months ago) Fix .gitignore mistake - DrFuzzy (tag: v1.5.1)

 

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

Λογικά θέλει

1. να δημιουργήσεις το branch develop στο τοπικό repo:

git checkout -b develop

2. Να κάνεις push το τοπικό develop στο origin develop

git push --set-upstream origin develop

Το flag --set-upstream σημαίνει "από εδώ και στο εξής το current branch θα κάνει push στο argument που σου έδωσα, δηλαδή το τοπικό  branch develop θα κάνει push στο branch develop του remote με το όνομα origin"

 

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

Λογικά θέλει

1. να δημιουργήσεις το branch develop στο τοπικό repo:


git checkout -b develop

2. Να κάνεις push το τοπικό develop στο origin develop


git push --set-upstream origin develop

Το flag --set-upstream σημαίνει "από εδώ και στο εξής το current branch θα κάνει push στο argument που σου έδωσα, δηλαδή το τοπικό  branch develop θα κάνει push στο branch develop του remote με το όνομα origin"

 

Άψογος ευχαριστώ!

Φαντάζομαι διότι έκανα βλακεία και δημιούργησα το branch γραφικά μέσα απο το bitbucket που είναι το remote repo χωρίς να το δημιουργήσω locally. Δηλαδή στο git checkout origin/develop που έδωσα επρεπε να εχω βάλει -b για να το δημιουργήσει και τοπικά εφόσον δεν υπήρχε.

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

Λογικά και τώρα όταν έκανες checkout θα σου έγραψε ότι είσαι σε DETACHED HEAD ή κάτι τέτοιο, το οποίο σημαίνει ότι δεν υπάρχει τοπικό branch

Σε γενικές γραμμές, ναι, όταν θέλεις να κάνεςι develop κάτι ξεκίνα από το local branch και άσε τα GUI στην ησυχία τους ;)

edit

Αν θες να εμβαθύνεις λίγο μου έχουν πει καλά λόγια για αυτό https://learngitbranching.js.org/

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

Λογικά και τώρα όταν έκανες checkout θα σου έγραψε ότι είσαι σε DETACHED HEAD ή κάτι τέτοιο, το οποίο σημαίνει ότι δεν υπάρχει τοπικό branch

Σε γενικές γραμμές, ναι, όταν θέλεις να κάνεςι develop κάτι ξεκίνα από το local branch και άσε τα GUI στην ησυχία τους ;)

edit

Αν θες να εμβαθύνεις λίγο μου έχουν πει καλά λόγια για αυτό https://learngitbranching.js.org/

Γενικά δεν είμαι του GUI...δε ξέρω πως μου ήρθε! :)

Ωραίος θα το δω.

Άσχετη ερώτηση. Υπάρχει δυνατότητα στο Git να γίνουν commit τα files με το modification timestamp και όχι με το current commit timestamp. Για παράδειγμα κάνω modify τα αρχεία στο local repo σήμερα αλλά τα κάνω commit και push στο remote μετά από 2 μήνες. Μπορεί στο commit log η ημερομηνία να είναι αυτή που γίνανε modify; Νομίζω αν θυμάμαι καλά παλιά στο CVS και το Clearcase γινόταν.

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

οκ καλο ειναι ν αξερεις το command line του git να εχεις ιδεα, αλλα καπου οπα.
στα απλα πραγματα οπως checkout, push ,merge κτλ μια χαρα βοηθαει το gui να γινεται η δουλεια γρηγορα και safe .
devs με 15 χρονια στον χωρο μαι χαρα πατανε τα κουμπακια στο ui  σαν γιαγιαδες και γινεται η δουλεια..

Δημοσ.
13 minutes ago, MitsarasAth said:

οκ καλο ειναι ν αξερεις το command line του git να εχεις ιδεα, αλλα καπου οπα.
στα απλα πραγματα οπως checkout, push ,merge κτλ μια χαρα βοηθαει το gui να γινεται η δουλεια γρηγορα και safe .
devs με 15 χρονια στον χωρο μαι χαρα πατανε τα κουμπακια στο ui  σαν γιαγιαδες και γινεται η δουλεια..

Ο,τι βολεύει τον καθένα. Προσωπικά προτιμώ terminal (όχι μόνο για το git).

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

 

Άσχετη ερώτηση. Υπάρχει δυνατότητα στο Git να γίνουν commit τα files με το modification timestamp και όχι με το current commit timestamp. Για παράδειγμα κάνω modify τα αρχεία στο local repo σήμερα αλλά τα κάνω commit και push στο remote μετά από 2 μήνες. Μπορεί στο commit log η ημερομηνία να είναι αυτή που γίνανε modify; Νομίζω αν θυμάμαι καλά παλιά στο CVS και το Clearcase γινόταν.

Από όσο ξέρω υπάρχουν 2 dates. Author date και committer date. Aυτές από default ταυτίζονται. Λογικά μπορείς να τις αλλάξεις για να εξυπηρετήσεις σενάρια όπως πχ σου στείλει κάποιος patches και τα κάνεις εσύ commit. Τις ημερομηνίες αυτές μπορείς να τις αλλάξεις ακόμα και μετά το commit (πριν το push όμως!).

Παρόλα αυτά, το modification time που αναφέρεις IMHV δεν έχει νόημα. Πχ σε ένα commit αλλάζεις 5 αρχεία. Και τα 5 έχουν διαφορετικό modification time. Ποιο θα χρησιμοποιήσεις; Σκέψου να αρχίσεις και τα rebase και τα cherry-picking κτλ.

Όπως και αν έχει, αν αυτό που θες είναι να αλλάξεις τα dates σε πολλά commits, μπορείς να χρησιμοποιήσεις κάτι που είχα γράψει παλιότερα: https://github.com/pmav99/git-rewrite (btw, νομίζω ότι και πάλι με αφορμή δική σου ερώτηση το είχα σουλουπώσει και ανεβάσει :P :D )

Αν είναι μόνο για ένα, αρκεί να κάνεις `git commit --amend` και ορίζεις μερικές env variables. Δες εδώ: https://codewithhugo.com/change-the-date-of-a-git-commit/

Επεξ/σία από pmav99
  • Like 1
Δημοσ.

Χαχα είναι motivating οι ερωτήσεις μου!😀

Έχεις δίκιο, έτσι όπως το έθεσα δεν έχει ιδιαίτερο νόημα. Αυτό που πραγματικά εννοούσα είναι αν γίνεται να γίνει preserved πχ το file creation timestamp του αρχείου (utime) κατά το commit και restore όταν γίνει clone το repo. Υπάρχει νομίζω κάτι στο git-tools και στο metastore αλλά δεν τα έχω δοκιμάσει.

btw πολύ helpful το git-rewite.

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

Για να είμαι απόλυτα ειλικρινής δεν μπορώ να σκεφτώ σενάριο που θα με ενδιάφερε τόσο πολύ το creation/modification time + μου φαίνεται abuse του POSIX. Δηλαδή, αν κάνω git clone ένα repo τα timestamps δεν θα είναι στην ώρα που έκανα το clone; Νομίζω ότι θα με παραξένευε αρκετά κάτι τέτοιο αν το πρόσεχα.

PS. Αν θες το utime τόσο πολύ γιατί δεν τα αποθηκεύεις σαν σχόλιο σε κάθε αρχείο; θα μπορούσες να γράψεις και ένα git pre-commit hook που θα ελέγχει αν υπάρχει τέτοιο σχόλιο σε κάθε αρχείο και αν όχι να το προσθέτει πριν το commit (αν και μου παραφαίνεται τραβηγμένο...).

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

PS. Αν θες το utime τόσο πολύ γιατί δεν τα αποθηκεύεις σαν σχόλιο σε κάθε αρχείο;

Ναι θα μπορούσα πριν το commit εύκολα με ενα sed να βρίσκει το @date field στο header comment και να βαζει το file modfication timestamp

var1=$(date -r tri2d.cpp +'%Y-%m-%d %H:%M:%S'); sed -i '' "s/@date.*/@date $var1/" tri2d.cpp

 

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

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

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

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

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

Σύνδεση

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

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