09:14 <grenoya> bonjour
09:27 <encolpe_> bonjour
09:33 <misc> coin
21:43 <gvall> salut
21:44 <gvall> est ce qu'il y aurait un gourou de git de dispo ? J'ai un petit gros soucis ....
21:47 <serge_sans_paill> gvall: on est tous le noob de quelqu'un, raconte !
21:49 <gvall> je code dans un gros projet python et je n'avais pas fait git pull depuis longtemps... entre temps j'ai fait des modifs dans une branche. J'ai voulu mettre à jour et là j'ai 11000 comité de retard et une liste interminable de conflits sur des choses que je n'ai pas touchées
21:49 <gvall> le problème c'est que je ne peux plus retourner sur ma branche et j'ai peur de perdre ce que j'ai fait
21:51 <serge_sans_paill> le problème c'est que je ne peux plus retourner sur ma branche << pkoa ?
21:52 <gvall> quand je fait un checkout il me dit que je dois d'abord gérer les conflits
21:53 <serge_sans_paill> tu est en plein dans un merge c'est ça ?
21:54 <gvall> j'ai fait git pull et il me dit que je dois faire merge
21:54 <serge_sans_paill> si c'est le cas un git reset --hard HEAD te remettra dans un état pre-merge (si tu as peut, fait un cp -r de ton dossier avant)
21:54 <serge_sans_paill> oui, git pull ça fait git fetch puis git merge
21:55 <serge_sans_paill> dans ton cas, ce que je ferais (après avoir annulé le merge, c'est)
21:55 <serge_sans_paill> 1. passer sur ta branche en retard
21:55 <serge_sans_paill> 2. en faire une copie (git checkout -b my-working-branch)
21:55 <serge_sans_paill> 3. tenter un git rebase origin/master
21:56 <haypo> serge_sans_paill: +1 pour le (3), j'allais proposer ça, rebase ;)
21:56 <serge_sans_paill> salut haypo
21:56 <haypo> et pour le (2) : j'ai mis longtemps à comprendre qu'une création de branche en git a un coût "nul", donc il faut en abuser :)
21:56 <haypo> et c'est carrément plus simple de revenir en arrière suite à une boulette quand on a des branches locales nommées
21:57 <haypo> git checkout -b ca_va_chier
21:57 <haypo> git rebase
21:57 <haypo> ... gros bordel ...
21:57 <haypo> git checkout ancienne_branche
21:57 <gvall> git rebase ça fait quoi en gros ?
21:57 <haypo> git branch -D ca_va_chier # on oublie ça, on va se coucher
21:57 <gvall> :)
21:57 <haypo> gvall: ça réapplique chacune de tes modifs par dessous la branche à jour
21:57 <haypo> git checkout -b ... revient un peu à un cp -R
21:58 <haypo> et git branch -D à un rm -rf
21:58 <feth> par dessus, pas par dessous :)
21:58 <serge_sans_paill> gvall, dans la page de man de git rebase, y a de jolis dessins qui expliquent ça
21:58 <haypo> sauf que c'est plus rapide
21:58 <haypo> feth: eh oui
21:59 <gvall> ok ok merci, bon là on est 100 niveaux au dessus de ce que je sais faire avec git ...
21:59 <gvall> pour l'instant je suis sur master, j'ai fait mon git reset --hard HEAD
21:59 <serge_sans_paill> ok
22:00 <serge_sans_paill> alors git checkout comment_vas_tu_vieille_branche
22:00 <serge_sans_paill> pour aller sur ta vieiile branche
22:00 <gvall> yes j'y suis :)
22:00 <serge_sans_paill> ensuite git checkout -b comme_tu_vois_ture_a_bras
22:00 <serge_sans_paill> ça c'est ta branche de sauvergarde
22:00 <serge_sans_paill> sauvegarde
22:01 <serge_sans_paill> ensuite git rebase origin/master
22:01 <gvall> je retourne dans master avant de faire le rebase ? car master n'est pas à jour non plus
22:02 <serge_sans_paill> non non
22:02 <serge_sans_paill> tu as des modifs perso sur master ?
22:02 <gvall> non
22:02 <gvall> je fais les modifs dans une branche à part pour éviter les conneries
22:02 <serge_sans_paill> ok
22:02 <gvall> ... ou presque
22:02 <serge_sans_paill> alors on va commencer par le plus simple
22:02 <serge_sans_paill> git checkout master
22:02 <serge_sans_paill> git pull origin master
22:03 <serge_sans_paill> ça doit passer crème
22:04 <gvall> non ... j'ai quantité de conflit. Ils on peut être fait une connerie ou alors il faudrait que je fasse le pull version par version ?
22:04 <alain_afpy> WARNING !!! YAKAFOKON DETECTED !!!!
22:05 <serge_sans_paill> si tu as des conflits, c'est soit 1/ que tu as des commits à toi
22:05 <serge_sans_paill> 2/ que le dépot a subit un push --force
22:06 <serge_sans_paill> esperons pour toi que le cas 1/ est vrai
22:06 <serge_sans_paill> le pull version par version va pas chager grand chose
22:07 <gvall> normalement non malheureusement
22:08 <gvall> comment je peux avoir l'historique des commits ? un git history ? ou autre ?
22:08 <serge_sans_paill> git log
22:09 <gvall> non les derniers commits ne sont pas de moi
22:09 <serge_sans_paill> git rev-list HEAD -n1
22:09 <serge_sans_paill> tu notes le sha1
22:10 <serge_sans_paill> puis
22:10 <serge_sans_paill> git rev-list origin/master | grep le-sha1
22:10 <serge_sans_paill> si ça te renvoie qqchose c'est bon signe
22:10 <serge_sans_paill> si ça affiche rien c'est mauvais signe
22:10 <gvall> ... rien
22:11 <gvall> quand je fait git status j'ai une série de "new file" en vert puis une série de "both added" en rouge
22:11 <feth> smells like reset
22:12 <serge_sans_paill> si git rev-list origin/master | grep le-sha1 te renvoie rien, c'est que ton dernier commit local est pas présent sur origin, et ça c'est pas bon signe
22:12 <serge_sans_paill> si au lieu de prendre le dernier, tu prends l'avant dernier, ça te donne quoi ?
22:13 <gvall> comment ça ?
22:14 <gvall> le grep devais tous me les donner non ?
22:14 <gvall> devait
22:14 <serge_sans_paill> for i in `seq 1 10`; do echo "=== $i ==="; git rev-list origin/master | grep `git rev-list HEAD -n$i | tail -n1` ; done
22:14 <serge_sans_paill> pour les 1à dernières révisions en local, regarde si elles apparaissent sur origin
22:16 <gvall> non ça renvoi rien, juste la liste de 1 à 10. En même temps j'ai jamais fais de commit sur origin. Je fais les modifs et commit dans ma branche puis je fais un push sur mon fork et je fais un pull roquets depuis mon fork du projet.
22:17 <serge_sans_paill> alors p'tet qu'ils ont fait un push --force
22:17 <serge_sans_paill> si tu changes 10 en 100 ?
22:18 <gvall> non tjs rien.
22:19 <gvall> Ceci dit avec en faisant le revert je peux retourner dans les branches récupérer mes modifs donc c'est pas perdu.
22:19 <gvall> En conclusion je n'ai plus qu'à supprimer et refaire un git clone pour repartir du début ?
22:20 <serge_sans_paill> gvall, dernière solution
22:20 <serge_sans_paill> on va repartir de leur répo et réappliquer tes commits dessus
22:20 <serge_sans_paill> on tente ça ?
22:20 <gvall> ok !
22:21 <serge_sans_paill> 1) git branch fresh origin/master
22:21 <serge_sans_paill> git checkout fresh
22:21 <serge_sans_paill> comme ça fresh est une copie clean de origin master
22:21 <serge_sans_paill> ensuite fait un git log ma_branche_perso # celle où tu as tes commits
22:22 <serge_sans_paill> et note le sha1 du premier commit qui ets pas de toi (je suppose ici que l'historique de cette branche c'est
22:22 <serge_sans_paill> des commits d'origin ... des commits d'orin ... des commits à toi
22:22 <gvall> ok mais je dois faire le reset d'abord alors ? Car si j'essaye d'aller sur fresh il me donne la liste de merge et il me dit "error: you need to resolve your current index first"
22:22 <serge_sans_paill> oui git reset --hard HEAD
22:24 <gvall> après le reset j'ai des fichiers CHANGES_BACKUP_16996.rst qu'il connait pas (untracked)
22:24 <serge_sans_paill> c'est pas grave
22:26 <gvall> ok donc j'ai créé la branch fresh et le git log me donne mes commits
22:26 <gvall> git log mabranche
22:26 <serge_sans_paill> ok
22:26 <serge_sans_paill> tu as le premier commit qui est pas de toi (son commit -id) ?
22:26 <gvall> les 2 premiers sont de moi ensuite non
22:27 <serge_sans_paill> ok, alors là j'ouvre ma page de man
22:27 <gvall> :)
22:28 <serge_sans_paill> git rebase --onto fresh premier-id-pas-a-toi mabranche ?
22:30 <gvall> il a appliqué les modifs je crois
22:30 <serge_sans_paill> \o/
22:30 <serge_sans_paill> git log pour vérifier ça
22:31 <gvall> oui les deux premier commit sont de moi
22:31 <serge_sans_paill> et bien, problème résolu
22:32 <gvall> du coup maintenant je fais git pull ?
22:32 <gvall> dans fresh
22:32 <serge_sans_paill> bah non, maintenant
22:32 <serge_sans_paill> tu as dans fresh l'équivalent de origin/master + tes deux commits, c'est ça ?
22:33 <feth> sinon, si le pb est d'être l'auteur du dernier commit : git commit --amend --author="mon nom <mon@email.com>"
22:33 <serge_sans_paill> si oui, git branch -D master; git branch master origin/master
22:33 <serge_sans_paill> puis git branch -D mabranche; git branch -m mabranche
22:33 <serge_sans_paill> git branch -D master va détruire ton master pourri
22:34 <serge_sans_paill> git branch master origin/master va faire pointer ton master local sur celui d'origin
22:34 <serge_sans_paill> git branch -D mabranche va détruire ta branche
22:34 <serge_sans_paill> git branch -m mabranche
22:34 <serge_sans_paill> va renommer fresh sur laquelle tu te trouves en mabranche
22:34 <serge_sans_paill> et tu auras
22:34 <serge_sans_paill> 1/ dans master une copie de master
22:34 <serge_sans_paill> 1/ dans master une copie de origin.master
22:35 <serge_sans_paill> 2/ dans mabranche origin/master + tes deux commits
22:36 <gvall> "it's a kind of magic!"
22:37 <serge_sans_paill> la magie, c'est l'explication qu'on trouve quand on comprend pas
22:44 <gvall> une question avant de tenter d'effacer les branches, tu dis que je suis dans fresh mais après avoir fait le rebase --onto ... je suis dans mabranche
22:44 <gvall> du coup je reviens dans fresh avant ?
22:44 <serge_sans_paill> oui
22:45 <serge_sans_paill> git log fresh pour être sur que tu as bien tout ce qu'il faut sur fresh (tes deux commits, suivis du dernier commit de origin/master)
22:46 <gvall> hum non
22:46 <gvall> il n'y a pas mes commis
22:47 <serge_sans_paill> ils sont dans mabranche, suivi du dernier commit d eorigin/master ?
22:47 <gvall> tout à l'heure en fait je les ai vu car après le rebase j'était dans mëabranche et non dans fresh
22:47 <gvall> non plus, dans mabranche j'ai mes commit puis des vieux commit du moi d'aout
22:48 <gvall> non pardon j'ai mes commits puis le dernier commit date du 15 novembre
22:49 <gvall> donc c'est dans gau que j'ai ce qu'il faut
22:50 <serge_sans_paill> gau ?
22:50 <gvall> mabranche = gau :)
22:50 <serge_sans_paill> donc dans gau y a ce que tu veux, c'est ça ?
22:50 <gvall> oui
22:50 <serge_sans_paill> alors git checkout gau
22:50 <serge_sans_paill> git branch -D master
22:51 <serge_sans_paill> git branch master origin/master
22:51 <serge_sans_paill> et ce sera bon
22:51 <gvall> ok c'est fait
22:51 <gvall> et je peux virer fresh ?
22:53 <gvall> rrroh master et gau sont au vert :)
22:54 <serge_sans_paill> oui tu peux dégager fresh
22:56 <gvall> et là master et mabranche sont identiques en fait
22:57 <gvall> du coup master est "en avance" sur le master du repo origin ?
22:59 <serge_sans_paill> non, c'est la même
23:00 <serge_sans_paill> git diff master origin/master
23:00 <serge_sans_paill> git branch master origin/master
23:00 <serge_sans_paill> te granatit que c'est les même normalement
23:00 <gvall> mais mes commits ne sont pas sur le repo origin
23:01 <gvall> je les ai jamais envoyé
23:02 <serge_sans_paill> tu as bien détruit (git branch -D master) master puis git branch master origin/master ?
23:02 <gvall> oui
23:05 <gvall> quand je fait git log mes commits ne sont que dans la branche mabranche
23:06 <serge_sans_paill> faut que j'aille je pieuter
23:06 <serge_sans_paill> mais j'ai l'impression qu'on est pas loin
23:06 <gvall> :)
23:06 <gvall> oui merci beaucoup !!!
23:06 <gvall> repos bien mérité
23:06 <serge_sans_paill> ++
23:06 <serge_sans_paill> j'espère que tu as un peu compris ce qui s'est passé aussi :-)
23:07 <gvall> je peux pas dire tout, le rebase est un peu mystérieux