• # Du gitcode à partager - ou pas

    Posté par (Mastodon) . En réponse au lien « Et merde, Git!?! ». Évalué à 9.

    Ah ben j'ai pas mal d'alias, ou de fonctions bash, de workflow git chez moi.
    J'ai même un .bashrc.git inclus dans le .bashrc général pour mettre ça dans un endroit séparé.

    Par exemple, tu bosses sur ton clone gitlub, et tu fais des PR sur l'origine gitlub aussi, il faut régulièrement remettre ta branche master/main à jour depuis l'origine.
    Alors :

    function gitmaster() {
     git status -bsuno | head -1 | sed -r 's/## ([^.]*).*/1円/'
     local master=main
     git checkout master && master=master || git checkout main
     git fetch upstream
     git rebase upstream/$master
     git push
    }

    Qui s'adapte en fonction de master/main, et t'affiche en haut le nom de la branche d'où tu es parti.
    Typiquement derrière tu peux faire un
    git checkout ma_branche_de_travail; git rebase/merge master

    J'ai aussi des alias simples comme :

    alias gitdiff="git diff --ignore-space-change --ignore-blank-lines"
    alias gitstatus="git status -bsuno"

    Après, quand j'ai commencé à bosser sur mainster, et qu'il est temps de commiter, j'ai pas encore de branche, alors j'ai ça, avec sa version tout intégré une branche, un commit avec le même texte que le nom de la branche vaguement mis en forme, pas de choix des fichiers à commiter, ie tu commites tout ce que tu as modifié, un push, et yapluka faire la PR sur gitlub :

    function gitnewbranch() {
     git stash
     gitmaster # la fonction plus haut pour synchro mon master avec celui de l'origine
     git checkout -b "1ドル"
     git stash pop
    }
    function gitsimplebranch() {
     local branchname="$(sed 's/*/⚹/g' <<< "1ドル")"
     gitnewbranch "$branchname"
     git commit -am "$(tr _ \  <<< "1ドル")"
     git push --set-upstream origin "$branchname"
    }

    Et pour le « oups j'ai commité/pushé trop tôt », j'ai aussi ça :

    function gitrepush() {
     local msg="$(git log -n1 --pretty=format:%s)"
     git reset HEAD~
     git commit -am "$msg"
     git push -f
    }

    Cette fonction est un condensé de conneries à ne pas faire : déjà on ne reprend que la première ligne du commit, ensuite on commite tous les fichiers modifiés sans réfléchir, et enfin on écrase un commit déjà envoyé sur le dépôt central, donc public, un vrai bonheur de goret !
    Ça se marie bien avec la gitsimplebranch de plus haut où le message ne fait qu'une ligne et équivaut au nom de la branche, et quand on pushe sur notre clone perso, c'est public mais pas trop, assez pratique pour débugger depuis le gitlub (des fois qu'il y ait une CICD automagique derrière) avant de faire la PR évidemment.

    • Yth.